@anishhs/retryq 1.0.0 → 1.1.0

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/dist/index.d.ts CHANGED
@@ -6,6 +6,11 @@ export type RetryQJobOptions = {
6
6
  jitter?: number;
7
7
  label?: string;
8
8
  priority?: number;
9
+ signal?: AbortSignal;
10
+ };
11
+ export type RetryQManagerConfig = {
12
+ maxConcurrent?: number;
13
+ maxHistorySize?: number;
9
14
  };
10
15
  export type JobState = "pending" | "running" | "completed" | "failed" | "cancelled";
11
16
  export interface RetryQJob {
@@ -15,13 +20,14 @@ export interface RetryQJob {
15
20
  priority: number;
16
21
  retriesLeft: number;
17
22
  promise: Promise<any>;
18
- cancel: () => void;
19
- fn: () => Promise<any>;
23
+ cancel: (force?: boolean) => void;
24
+ fn: (signal?: AbortSignal) => Promise<any>;
20
25
  options: RetryQJobOptions;
21
26
  createdAt: number;
22
27
  startedAt?: number;
23
28
  finishedAt?: number;
24
29
  error?: any;
30
+ abortController?: AbortController;
25
31
  }
26
32
  export interface CancelableFunction {
27
33
  (): void;
@@ -33,13 +39,16 @@ export declare class RetryQManager {
33
39
  private failedJobs;
34
40
  private completedJobs;
35
41
  private maxConcurrent;
42
+ private maxHistorySize;
36
43
  private registry;
37
- constructor(maxConcurrent?: number);
38
- createJob(fn: () => Promise<any>, options?: RetryQJobOptions): RetryQJob;
44
+ constructor(config?: RetryQManagerConfig | number);
45
+ private _evictOldest;
46
+ clearHistory(state?: JobState): void;
47
+ createJob(fn: (signal?: AbortSignal) => Promise<any>, options?: RetryQJobOptions): RetryQJob;
39
48
  private _sortQueue;
40
49
  private _processQueue;
41
50
  private _runJob;
42
- cancelJob(id: string): void;
51
+ cancelJob(id: string, force?: boolean): void;
43
52
  listJobs(): {
44
53
  pending: {
45
54
  id: string;
package/dist/index.js CHANGED
@@ -1,18 +1,14 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.RetryQManager = void 0;
13
- // Custom ID generator using timestamp + larger random suffix
4
+ // Custom ID generator - improved collision resistance with counter + multiple random segments
5
+ let idCounter = 0;
14
6
  function randomId() {
15
- return `job-${Date.now()}-${Math.random().toString(36).slice(2, 12)}`;
7
+ const timestamp = Date.now();
8
+ const counter = (idCounter++ % 10000).toString(36);
9
+ const random1 = Math.random().toString(36).slice(2, 11);
10
+ const random2 = Math.random().toString(36).slice(2, 11);
11
+ return `job-${timestamp}-${counter}-${random1}${random2}`;
16
12
  }
17
13
  function sleep(ms, cancelFn) {
18
14
  return new Promise((resolve, reject) => {
@@ -26,32 +22,104 @@ function sleep(ms, cancelFn) {
26
22
  });
27
23
  }
28
24
  class RetryQManager {
29
- constructor(maxConcurrent = Infinity) {
25
+ constructor(config = {}) {
26
+ var _a, _b;
30
27
  this.pendingQueue = [];
31
28
  this.runningJobs = new Map();
32
29
  this.failedJobs = new Map();
33
30
  this.completedJobs = new Map();
34
31
  this.registry = new Map();
35
- this.maxConcurrent = maxConcurrent;
32
+ // Support legacy number parameter for backwards compatibility
33
+ if (typeof config === "number") {
34
+ this.maxConcurrent = config;
35
+ this.maxHistorySize = 1000;
36
+ }
37
+ else {
38
+ this.maxConcurrent = (_a = config.maxConcurrent) !== null && _a !== void 0 ? _a : Infinity;
39
+ this.maxHistorySize = (_b = config.maxHistorySize) !== null && _b !== void 0 ? _b : 1000;
40
+ }
41
+ }
42
+ // Evict oldest job from a map when it exceeds maxHistorySize
43
+ _evictOldest(map) {
44
+ if (map.size >= this.maxHistorySize) {
45
+ const oldest = map.keys().next().value;
46
+ if (oldest) {
47
+ map.delete(oldest);
48
+ }
49
+ }
50
+ }
51
+ // Clear job history for a specific state or all states
52
+ clearHistory(state) {
53
+ if (!state || state === "failed") {
54
+ this.failedJobs.clear();
55
+ }
56
+ if (!state || state === "completed") {
57
+ this.completedJobs.clear();
58
+ }
36
59
  }
37
60
  createJob(fn, options = {}) {
38
- var _a, _b;
61
+ var _a, _b, _c, _d, _e, _f;
62
+ // Input validation to prevent DoS and invalid configurations
63
+ const retries = (_a = options.retries) !== null && _a !== void 0 ? _a : 3;
64
+ const delay = (_b = options.delay) !== null && _b !== void 0 ? _b : 1000;
65
+ const backoff = (_c = options.backoff) !== null && _c !== void 0 ? _c : 2;
66
+ const maxTime = (_d = options.maxTime) !== null && _d !== void 0 ? _d : 30000; // Increased from 5000 to 30000 (30s)
67
+ const jitter = (_e = options.jitter) !== null && _e !== void 0 ? _e : 0.1;
68
+ const priority = (_f = options.priority) !== null && _f !== void 0 ? _f : 1;
69
+ // Validate inputs
70
+ if (retries < 0) {
71
+ throw new Error("retries must be >= 0");
72
+ }
73
+ if (retries > 100) {
74
+ throw new Error("retries cannot exceed 100 (DoS protection)");
75
+ }
76
+ if (delay < 0) {
77
+ throw new Error("delay must be >= 0");
78
+ }
79
+ if (backoff < 1) {
80
+ throw new Error("backoff must be >= 1");
81
+ }
82
+ if (maxTime <= 0) {
83
+ throw new Error("maxTime must be > 0");
84
+ }
85
+ if (jitter < 0 || jitter > 1) {
86
+ throw new Error("jitter must be between 0 and 1");
87
+ }
39
88
  const id = randomId();
89
+ // Create internal AbortController for force cancellation
90
+ const abortController = new AbortController();
91
+ // If external signal provided, link it to internal controller
92
+ if (options.signal) {
93
+ const externalSignal = options.signal;
94
+ externalSignal.addEventListener('abort', () => {
95
+ if (!abortController.signal.aborted) {
96
+ abortController.abort(externalSignal.reason);
97
+ }
98
+ });
99
+ }
40
100
  const job = {
41
101
  id,
42
102
  label: options.label || id,
43
103
  state: "pending",
44
- priority: (_a = options.priority) !== null && _a !== void 0 ? _a : 1,
45
- retriesLeft: (_b = options.retries) !== null && _b !== void 0 ? _b : 3,
104
+ priority,
105
+ retriesLeft: retries + 1, // +1 for initial attempt (retries is number of RETRIES, not total attempts)
46
106
  promise: Promise.resolve(), // placeholder
47
- cancel: () => this.cancelJob(id),
107
+ cancel: (force) => this.cancelJob(id, force),
48
108
  fn,
49
- options,
109
+ options: Object.assign(Object.assign({}, options), { retries, delay, backoff, maxTime, jitter, priority }),
50
110
  createdAt: Date.now(),
111
+ abortController,
51
112
  };
52
- job.promise = this._runJob(job);
113
+ // Add to pending queue BEFORE starting execution (fixes state inconsistency)
53
114
  this.pendingQueue.push(job);
54
115
  this._sortQueue();
116
+ // Start execution
117
+ job.promise = this._runJob(job);
118
+ // Add internal error handler to prevent unhandled promise rejections
119
+ job.promise.catch(() => {
120
+ // Errors are already handled in _runJob and stored in job.error
121
+ // This catch prevents unhandled rejection if consumer doesn't add .catch()
122
+ });
55
123
  this._processQueue();
56
124
  return job;
57
125
  }
@@ -59,73 +127,133 @@ class RetryQManager {
59
127
  this.pendingQueue.sort((a, b) => b.priority - a.priority);
60
128
  }
61
129
  _processQueue() {
62
- return __awaiter(this, void 0, void 0, function* () {
63
- while (this.runningJobs.size < this.maxConcurrent &&
64
- this.pendingQueue.length > 0) {
65
- const job = this.pendingQueue.shift();
66
- // job.promise already set in createJob
67
- this.runningJobs.set(job.id, job);
68
- }
69
- });
130
+ // Synchronous to prevent race conditions with concurrent calls
131
+ while (this.runningJobs.size < this.maxConcurrent &&
132
+ this.pendingQueue.length > 0) {
133
+ const job = this.pendingQueue.shift();
134
+ // job.promise already set in createJob
135
+ this.runningJobs.set(job.id, job);
136
+ }
70
137
  }
71
- _runJob(job) {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- var _a;
74
- job.state = "running";
75
- job.startedAt = Date.now();
76
- const cancelFn = () => { };
77
- this.registry.set(job.id, cancelFn);
78
- const { delay = 1000, backoff = 2, maxTime = 5000, jitter = 0.1, } = job.options;
79
- let currentDelay = delay;
138
+ async _runJob(job) {
139
+ var _a, _b, _c, _d;
140
+ // Wait until _processQueue() has moved this job to runningJobs
141
+ // This enforces concurrency control
142
+ while (!this.runningJobs.has(job.id)) {
143
+ // Check if cancelled while waiting
144
+ if (job.state === "cancelled") {
145
+ throw job.error || new Error("Job cancelled");
146
+ }
147
+ // Check if external/internal signal already aborted
148
+ if ((_a = job.abortController) === null || _a === void 0 ? void 0 : _a.signal.aborted) {
149
+ job.state = "cancelled";
150
+ job.error = new Error("Job cancelled via abort signal");
151
+ throw job.error;
152
+ }
153
+ // Yield control to allow _processQueue() to run
154
+ await new Promise(resolve => setTimeout(resolve, 0));
155
+ }
156
+ job.state = "running";
157
+ job.startedAt = Date.now();
158
+ const cancelFn = () => { };
159
+ this.registry.set(job.id, cancelFn);
160
+ const { delay = 1000, backoff = 2, maxTime = 30000, jitter = 0.1, } = job.options;
161
+ let currentDelay = delay;
162
+ try {
80
163
  while (job.retriesLeft > 0) {
81
- const elapsed = Date.now() - ((_a = job.startedAt) !== null && _a !== void 0 ? _a : Date.now());
164
+ // Check for cancellation at the start of each iteration
165
+ if (job.state === "cancelled") {
166
+ break;
167
+ }
168
+ // Check if abort signal was triggered
169
+ if ((_b = job.abortController) === null || _b === void 0 ? void 0 : _b.signal.aborted) {
170
+ job.state = "cancelled";
171
+ job.error = new Error("Job cancelled via abort signal");
172
+ break;
173
+ }
174
+ const elapsed = Date.now() - ((_c = job.startedAt) !== null && _c !== void 0 ? _c : Date.now());
82
175
  if (elapsed >= maxTime)
83
176
  break;
84
177
  try {
85
- const result = yield job.fn();
178
+ // Pass abort signal to job function for force cancellation support
179
+ const signal = ((_d = job.abortController) === null || _d === void 0 ? void 0 : _d.signal) || new AbortController().signal;
180
+ const result = await job.fn(signal);
181
+ // Check if cancelled during execution
182
+ if (job.state === "cancelled") {
183
+ break;
184
+ }
86
185
  job.state = "completed";
87
186
  job.finishedAt = Date.now();
187
+ // Evict oldest if history is full, then add new job
188
+ this._evictOldest(this.completedJobs);
88
189
  this.completedJobs.set(job.id, job);
89
190
  this.runningJobs.delete(job.id);
191
+ this.registry.delete(job.id); // Clean up registry
90
192
  this._processQueue();
91
193
  return result; // returns actual value
92
194
  }
93
195
  catch (err) {
94
196
  job.retriesLeft--;
95
197
  job.error = err;
198
+ // Check again after error in case cancelled during execution
199
+ if (job.state === "cancelled") {
200
+ break;
201
+ }
96
202
  if (job.retriesLeft <= 0)
97
203
  break;
98
- // jitter
204
+ // jitter with boundary checks
99
205
  const jitterAmount = currentDelay * jitter;
100
206
  let adjustedDelay = currentDelay + (Math.random() * 2 - 1) * jitterAmount;
101
- adjustedDelay = Math.min(adjustedDelay, maxTime - elapsed);
207
+ adjustedDelay = Math.max(0, Math.min(adjustedDelay, maxTime - elapsed));
102
208
  if (adjustedDelay > 0)
103
- yield sleep(adjustedDelay, cancelFn);
209
+ await sleep(adjustedDelay, cancelFn);
104
210
  currentDelay *= backoff;
105
211
  }
106
212
  }
107
- if (!["cancelled", "failed"].includes(job.state))
213
+ // Job failed after exhausting retries or exceeding maxTime
214
+ // Only set to failed if not already cancelled (can be set externally by cancelJob)
215
+ const currentState = job.state;
216
+ if (currentState !== "cancelled") {
108
217
  job.state = "failed";
109
- job.finishedAt = Date.now();
218
+ job.finishedAt = Date.now();
219
+ // Evict oldest if history is full, then add new job
220
+ this._evictOldest(this.failedJobs);
221
+ this.failedJobs.set(job.id, job);
222
+ }
223
+ // Cleanup (safe to call even if already done by cancelJob)
110
224
  this.runningJobs.delete(job.id);
111
- this.failedJobs.set(job.id, job);
225
+ this.registry.delete(job.id);
112
226
  this._processQueue();
113
227
  throw job.error || new Error("Job failed");
114
- });
228
+ }
229
+ catch (err) {
230
+ // Ensure cleanup happens even if there's an unexpected error
231
+ this.runningJobs.delete(job.id);
232
+ this.registry.delete(job.id);
233
+ throw err;
234
+ }
115
235
  }
116
- cancelJob(id) {
236
+ cancelJob(id, force = false) {
117
237
  const job = this.runningJobs.get(id) || this.pendingQueue.find((j) => j.id === id);
118
238
  if (!job)
119
239
  return;
120
240
  job.state = "cancelled";
121
241
  job.error = new Error("Job cancelled");
122
242
  job.finishedAt = Date.now();
243
+ // Force cancellation: abort the controller to interrupt in-progress execution
244
+ if (force && job.abortController && !job.abortController.signal.aborted) {
245
+ job.abortController.abort(new Error("Job forcefully cancelled"));
246
+ }
123
247
  this.runningJobs.delete(id);
124
248
  this.pendingQueue = this.pendingQueue.filter((j) => j.id !== id);
249
+ // Evict oldest if history is full, then add cancelled job
250
+ this._evictOldest(this.failedJobs);
125
251
  this.failedJobs.set(id, job);
126
252
  const cancelFn = this.registry.get(id);
127
253
  if (cancelFn === null || cancelFn === void 0 ? void 0 : cancelFn.cancelSleep)
128
254
  cancelFn.cancelSleep();
255
+ // Clean up registry
256
+ this.registry.delete(id);
129
257
  }
130
258
  listJobs() {
131
259
  return {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@anishhs/retryq",
3
- "version": "1.0.0",
4
- "description": "Retry manager for handling multiple concurrent jobs",
3
+ "version": "1.1.0",
4
+ "description": "Production-ready retry queue with force cancellation, priorities, and exponential backoff",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": [
@@ -11,7 +11,11 @@
11
11
  "prepare": "npm run build",
12
12
  "build": "tsc",
13
13
  "start": "node dist/index.js",
14
- "dev": "ts-node src/index.ts"
14
+ "dev": "ts-node src/index.ts",
15
+ "test": "npm run test:verification && npm run test:force-cancel && npm run test:cancellation",
16
+ "test:verification": "node tests/verification.test.js",
17
+ "test:force-cancel": "node tests/force-cancellation.test.js",
18
+ "test:cancellation": "node tests/cancellation-proof.test.js"
15
19
  },
16
20
  "keywords": [
17
21
  "retryq",