@forge/events 0.4.1-next.0 → 0.5.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/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # @forge/events
2
2
 
3
+ ## 0.5.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [70e9c8c]
8
+ - Updated dependencies [32d11d1]
9
+ - @forge/api@2.5.0
10
+
11
+ ## 0.5.1-next.0
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [df2cd2f]
16
+ - @forge/api@2.5.0-next.0
17
+
18
+ ## 0.5.0
19
+
20
+ ### Minor Changes
21
+
22
+ - 53e3fda: Create new API jobProgress.cancel() in forge-events package
23
+
24
+ ### Patch Changes
25
+
26
+ - @forge/api@2.4.0
27
+
28
+ ## 0.5.0-next.1
29
+
30
+ ### Minor Changes
31
+
32
+ - 53e3fda: Create new API jobProgress.cancel() in forge-events package
33
+
3
34
  ## 0.4.1-next.0
4
35
 
5
36
  ### Patch Changes
@@ -58,6 +58,30 @@ describe('JobProgress methods', () => {
58
58
  });
59
59
  });
60
60
  });
61
+ describe('cancel', () => {
62
+ it('should call the queue/cancel endpoint', async () => {
63
+ const apiClientMock = utils_1.getApiClientMock({}, 204);
64
+ const jobProgress = getJobProgress(apiClientMock, 'test-queue-name#test-job-id');
65
+ const response = await jobProgress.cancel();
66
+ utils_1.verifyApiClientCalledWith(apiClientMock, '/webhook/queue/cancel/{cloudId}/{environmentId}/{appId}/{appVersion}', {
67
+ queueName: 'test-queue-name',
68
+ jobId: 'test-job-id'
69
+ });
70
+ expect(response.status).toEqual(204);
71
+ });
72
+ it('should throw JobDoesNotExistError', async () => {
73
+ const apiClientMock = utils_1.getApiClientMock({
74
+ message: 'Job Not Found',
75
+ code: 404
76
+ }, 404);
77
+ const jobProgress = getJobProgress(apiClientMock, 'test-queue-name#test-job-id');
78
+ await expect(jobProgress.cancel()).rejects.toThrow(new errors_1.JobDoesNotExistError(`The job test-job-id was not found for the queue test-queue-name.`));
79
+ utils_1.verifyApiClientCalledWith(apiClientMock, '/webhook/queue/cancel/{cloudId}/{environmentId}/{appId}/{appVersion}', {
80
+ queueName: 'test-queue-name',
81
+ jobId: 'test-job-id'
82
+ });
83
+ });
84
+ });
61
85
  it('should throw InternalServerError when WHP returns 422 response', async () => {
62
86
  const apiClientMock = utils_1.getApiClientMock({
63
87
  errors: ['jobId must not be null', 'queueName must not be null']
@@ -4,5 +4,6 @@ export declare class JobProgress {
4
4
  private id;
5
5
  constructor(id: string, apiClient?: FetchMethod);
6
6
  getStats(): Promise<APIResponse>;
7
+ cancel(): Promise<APIResponse>;
7
8
  }
8
9
  //# sourceMappingURL=jobProgress.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jobProgress.d.ts","sourceRoot":"","sources":["../src/jobProgress.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAmB,MAAM,SAAS,CAAC;AAEpE,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,EAAE,CAAS;gBAEP,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,WAAW;IAKzC,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;CAcvC"}
1
+ {"version":3,"file":"jobProgress.d.ts","sourceRoot":"","sources":["../src/jobProgress.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAoB,WAAW,EAAmB,MAAM,SAAS,CAAC;AAEtF,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,EAAE,CAAS;gBAEP,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,WAAW;IAKzC,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAehC,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;CAcrC"}
@@ -20,5 +20,17 @@ class JobProgress {
20
20
  await validators_1.validateGetStatsAPIResponse(response, getStatsRequest);
21
21
  return response;
22
22
  }
23
+ async cancel() {
24
+ const [queueName, jobId] = this.id.split('#');
25
+ const cancelJobRequest = {
26
+ queueName: queueName,
27
+ jobId: jobId,
28
+ time: new Date().toISOString()
29
+ };
30
+ validators_1.validateCancelJobRequest(cancelJobRequest);
31
+ const response = await queries_1.post(queries_1.CANCEL_JOB_PATH, cancelJobRequest, this.apiClient);
32
+ await validators_1.validateCancelJobAPIResponse(response, cancelJobRequest);
33
+ return response;
34
+ }
23
35
  }
24
36
  exports.JobProgress = JobProgress;
package/out/queries.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { APIRequest, APIResponse, FetchMethod } from './types';
2
2
  export declare const PUSH_PATH = "/webhook/queue/publish/{cloudId}/{environmentId}/{appId}/{appVersion}";
3
3
  export declare const GET_STATS_PATH = "/webhook/queue/stats/{cloudId}/{environmentId}/{appId}/{appVersion}";
4
+ export declare const CANCEL_JOB_PATH = "/webhook/queue/cancel/{cloudId}/{environmentId}/{appId}/{appVersion}";
4
5
  export declare const post: (endpoint: string, body: APIRequest, apiClient: FetchMethod) => Promise<APIResponse>;
5
6
  //# sourceMappingURL=queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE/D,eAAO,MAAM,SAAS,0EAA0E,CAAC;AACjG,eAAO,MAAM,cAAc,wEAAwE,CAAC;AAEpG,eAAO,MAAM,IAAI,aAAoB,MAAM,QAAQ,UAAU,aAAa,WAAW,KAAG,OAAO,CAAC,WAAW,CAU1G,CAAC"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE/D,eAAO,MAAM,SAAS,0EAA0E,CAAC;AACjG,eAAO,MAAM,cAAc,wEAAwE,CAAC;AACpG,eAAO,MAAM,eAAe,yEAAyE,CAAC;AAEtG,eAAO,MAAM,IAAI,aAAoB,MAAM,QAAQ,UAAU,aAAa,WAAW,KAAG,OAAO,CAAC,WAAW,CAU1G,CAAC"}
package/out/queries.js CHANGED
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.post = exports.GET_STATS_PATH = exports.PUSH_PATH = void 0;
3
+ exports.post = exports.CANCEL_JOB_PATH = exports.GET_STATS_PATH = exports.PUSH_PATH = void 0;
4
4
  exports.PUSH_PATH = '/webhook/queue/publish/{cloudId}/{environmentId}/{appId}/{appVersion}';
5
5
  exports.GET_STATS_PATH = '/webhook/queue/stats/{cloudId}/{environmentId}/{appId}/{appVersion}';
6
+ exports.CANCEL_JOB_PATH = '/webhook/queue/cancel/{cloudId}/{environmentId}/{appId}/{appVersion}';
6
7
  exports.post = async (endpoint, body, apiClient) => {
7
8
  const request = {
8
9
  method: 'POST',
package/out/types.d.ts CHANGED
@@ -26,4 +26,5 @@ export interface FailedEvent {
26
26
  payload: Payload;
27
27
  }
28
28
  export declare type GetStatsRequest = APIRequest;
29
+ export declare type CancelJobRequest = APIRequest;
29
30
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnD,oBAAY,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,IAAI,GAAG,QAAQ,GAAG,YAAY,CAAC,CAAC;AAC3G,oBAAY,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AACnF,oBAAY,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AACD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,oBAAY,eAAe,GAAG,UAAU,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnD,oBAAY,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,IAAI,GAAG,QAAQ,GAAG,YAAY,CAAC,CAAC;AAC3G,oBAAY,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AACnF,oBAAY,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AACD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,oBAAY,eAAe,GAAG,UAAU,CAAC;AACzC,oBAAY,gBAAgB,GAAG,UAAU,CAAC"}
@@ -1,9 +1,11 @@
1
- import { APIResponse, GetStatsRequest, Payload, PushRequest, PushSettings } from './types';
1
+ import { APIResponse, CancelJobRequest, GetStatsRequest, Payload, PushRequest, PushSettings } from './types';
2
2
  export declare const validateQueueKey: (queueName: string) => void;
3
3
  export declare const validatePushSettings: (settings: PushSettings) => void;
4
4
  export declare const validatePushPayloads: (payloads: Payload | Payload[]) => void;
5
5
  export declare const validateGetStatsPayload: (getStatsRequest: GetStatsRequest) => void;
6
+ export declare const validateCancelJobRequest: (cancelJobRequest: CancelJobRequest) => void;
6
7
  export declare const validateAPIResponse: (response: APIResponse, expectedSuccessStatus: number) => Promise<void>;
7
8
  export declare const validatePushAPIResponse: (response: APIResponse, requestBody: PushRequest) => Promise<void>;
8
9
  export declare const validateGetStatsAPIResponse: (response: APIResponse, getStatsRequest: GetStatsRequest) => Promise<void>;
10
+ export declare const validateCancelJobAPIResponse: (response: APIResponse, cancelJobRequest: GetStatsRequest) => Promise<void>;
9
11
  //# sourceMappingURL=validators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAM3F,eAAO,MAAM,gBAAgB,cAAe,MAAM,SAIjD,CAAC;AAEF,eAAO,MAAM,oBAAoB,aAAc,YAAY,SAI1D,CAAC;AAEF,eAAO,MAAM,oBAAoB,aAAc,OAAO,GAAG,OAAO,EAAE,SAajE,CAAC;AAEF,eAAO,MAAM,uBAAuB,oBAAqB,eAAe,SAKvE,CAAC;AAEF,eAAO,MAAM,mBAAmB,aAAoB,WAAW,yBAAyB,MAAM,kBA6B7F,CAAC;AAEF,eAAO,MAAM,uBAAuB,aAAoB,WAAW,eAAe,WAAW,kBAkC5F,CAAC;AAEF,eAAO,MAAM,2BAA2B,aAAoB,WAAW,mBAAmB,eAAe,kBAMxG,CAAC"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAM7G,eAAO,MAAM,gBAAgB,cAAe,MAAM,SAIjD,CAAC;AAEF,eAAO,MAAM,oBAAoB,aAAc,YAAY,SAI1D,CAAC;AAEF,eAAO,MAAM,oBAAoB,aAAc,OAAO,GAAG,OAAO,EAAE,SAajE,CAAC;AAEF,eAAO,MAAM,uBAAuB,oBAAqB,eAAe,SAKvE,CAAC;AAEF,eAAO,MAAM,wBAAwB,qBAAsB,gBAAgB,SAK1E,CAAC;AAEF,eAAO,MAAM,mBAAmB,aAAoB,WAAW,yBAAyB,MAAM,kBA6B7F,CAAC;AAEF,eAAO,MAAM,uBAAuB,aAAoB,WAAW,eAAe,WAAW,kBAkC5F,CAAC;AAEF,eAAO,MAAM,2BAA2B,aAAoB,WAAW,mBAAmB,eAAe,kBAMxG,CAAC;AAEF,eAAO,MAAM,4BAA4B,aAAoB,WAAW,oBAAoB,eAAe,kBAM1G,CAAC"}
package/out/validators.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateGetStatsAPIResponse = exports.validatePushAPIResponse = exports.validateAPIResponse = exports.validateGetStatsPayload = exports.validatePushPayloads = exports.validatePushSettings = exports.validateQueueKey = void 0;
3
+ exports.validateCancelJobAPIResponse = exports.validateGetStatsAPIResponse = exports.validatePushAPIResponse = exports.validateAPIResponse = exports.validateCancelJobRequest = exports.validateGetStatsPayload = exports.validatePushPayloads = exports.validatePushSettings = exports.validateQueueKey = void 0;
4
4
  const errors_1 = require("./errors");
5
5
  const text_1 = require("./text");
6
6
  const VALID_QUEUE_NAME_PATTERN = /^[a-zA-Z0-9-_]+$/;
@@ -34,6 +34,12 @@ exports.validateGetStatsPayload = (getStatsRequest) => {
34
34
  }
35
35
  exports.validateQueueKey(getStatsRequest.queueName);
36
36
  };
37
+ exports.validateCancelJobRequest = (cancelJobRequest) => {
38
+ if (!cancelJobRequest.jobId) {
39
+ throw new errors_1.JobDoesNotExistError(text_1.Text.error.jobIdEmpty);
40
+ }
41
+ exports.validateQueueKey(cancelJobRequest.queueName);
42
+ };
37
43
  exports.validateAPIResponse = async (response, expectedSuccessStatus) => {
38
44
  if (response.status === 429) {
39
45
  throw new errors_1.RateLimitError(text_1.Text.error.rateLimitError);
@@ -89,3 +95,9 @@ exports.validateGetStatsAPIResponse = async (response, getStatsRequest) => {
89
95
  }
90
96
  await exports.validateAPIResponse(response, 200);
91
97
  };
98
+ exports.validateCancelJobAPIResponse = async (response, cancelJobRequest) => {
99
+ if (response.status === 404) {
100
+ throw new errors_1.JobDoesNotExistError(text_1.Text.error.jobDoesNotExit(cancelJobRequest.jobId, cancelJobRequest.queueName));
101
+ }
102
+ await exports.validateAPIResponse(response, 204);
103
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/events",
3
- "version": "0.4.1-next.0",
3
+ "version": "0.5.1",
4
4
  "description": "Forge Async Event methods",
5
5
  "author": "Atlassian",
6
6
  "license": "UNLICENSED",
@@ -12,11 +12,11 @@
12
12
  "compile": "tsc -b -v"
13
13
  },
14
14
  "devDependencies": {
15
- "@types/uuid": "^3.4.7",
16
- "@types/node": "^12.12.63"
15
+ "@types/node": "^12.12.63",
16
+ "@types/uuid": "^3.4.7"
17
17
  },
18
18
  "dependencies": {
19
- "uuid": "^3.4.0",
20
- "@forge/api": "^2.4.0-next.0"
19
+ "@forge/api": "^2.5.0",
20
+ "uuid": "^3.4.0"
21
21
  }
22
22
  }
@@ -75,6 +75,37 @@ describe('JobProgress methods', () => {
75
75
  });
76
76
  });
77
77
 
78
+ describe('cancel', () => {
79
+ it('should call the queue/cancel endpoint', async () => {
80
+ const apiClientMock = getApiClientMock({}, 204);
81
+ const jobProgress = getJobProgress(apiClientMock, 'test-queue-name#test-job-id');
82
+ const response = await jobProgress.cancel();
83
+ verifyApiClientCalledWith(apiClientMock, '/webhook/queue/cancel/{cloudId}/{environmentId}/{appId}/{appVersion}', {
84
+ queueName: 'test-queue-name',
85
+ jobId: 'test-job-id'
86
+ });
87
+ expect(response.status).toEqual(204);
88
+ });
89
+
90
+ it('should throw JobDoesNotExistError', async () => {
91
+ const apiClientMock = getApiClientMock(
92
+ {
93
+ message: 'Job Not Found',
94
+ code: 404
95
+ },
96
+ 404
97
+ );
98
+ const jobProgress = getJobProgress(apiClientMock, 'test-queue-name#test-job-id');
99
+ await expect(jobProgress.cancel()).rejects.toThrow(
100
+ new JobDoesNotExistError(`The job test-job-id was not found for the queue test-queue-name.`)
101
+ );
102
+ verifyApiClientCalledWith(apiClientMock, '/webhook/queue/cancel/{cloudId}/{environmentId}/{appId}/{appVersion}', {
103
+ queueName: 'test-queue-name',
104
+ jobId: 'test-job-id'
105
+ });
106
+ });
107
+ });
108
+
78
109
  it('should throw InternalServerError when WHP returns 422 response', async () => {
79
110
  const apiClientMock = getApiClientMock(
80
111
  {
@@ -1,6 +1,11 @@
1
- import { GET_STATS_PATH, post } from './queries';
2
- import { validateGetStatsAPIResponse, validateGetStatsPayload } from './validators';
3
- import { APIResponse, FetchMethod, GetStatsRequest } from './types';
1
+ import { CANCEL_JOB_PATH, GET_STATS_PATH, post } from './queries';
2
+ import {
3
+ validateCancelJobAPIResponse,
4
+ validateCancelJobRequest,
5
+ validateGetStatsAPIResponse,
6
+ validateGetStatsPayload
7
+ } from './validators';
8
+ import { APIResponse, CancelJobRequest, FetchMethod, GetStatsRequest } from './types';
4
9
 
5
10
  export class JobProgress {
6
11
  private readonly apiClient: FetchMethod;
@@ -25,4 +30,19 @@ export class JobProgress {
25
30
  await validateGetStatsAPIResponse(response, getStatsRequest);
26
31
  return response;
27
32
  }
33
+
34
+ async cancel(): Promise<APIResponse> {
35
+ const [queueName, jobId] = this.id.split('#');
36
+ const cancelJobRequest: CancelJobRequest = {
37
+ queueName: queueName,
38
+ jobId: jobId,
39
+ time: new Date().toISOString()
40
+ };
41
+
42
+ validateCancelJobRequest(cancelJobRequest);
43
+
44
+ const response = await post(CANCEL_JOB_PATH, cancelJobRequest, this.apiClient);
45
+ await validateCancelJobAPIResponse(response, cancelJobRequest);
46
+ return response;
47
+ }
28
48
  }
package/src/queries.ts CHANGED
@@ -2,6 +2,7 @@ import { APIRequest, APIResponse, FetchMethod } from './types';
2
2
 
3
3
  export const PUSH_PATH = '/webhook/queue/publish/{cloudId}/{environmentId}/{appId}/{appVersion}';
4
4
  export const GET_STATS_PATH = '/webhook/queue/stats/{cloudId}/{environmentId}/{appId}/{appVersion}';
5
+ export const CANCEL_JOB_PATH = '/webhook/queue/cancel/{cloudId}/{environmentId}/{appId}/{appVersion}';
5
6
 
6
7
  export const post = async (endpoint: string, body: APIRequest, apiClient: FetchMethod): Promise<APIResponse> => {
7
8
  const request = {
package/src/types.ts CHANGED
@@ -30,3 +30,4 @@ export interface FailedEvent {
30
30
  }
31
31
 
32
32
  export type GetStatsRequest = APIRequest;
33
+ export type CancelJobRequest = APIRequest;
package/src/validators.ts CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  InvocationLimitReachedError
12
12
  } from './errors';
13
13
  import { Text } from './text';
14
- import { APIResponse, GetStatsRequest, Payload, PushRequest, PushSettings } from './types';
14
+ import { APIResponse, CancelJobRequest, GetStatsRequest, Payload, PushRequest, PushSettings } from './types';
15
15
 
16
16
  const VALID_QUEUE_NAME_PATTERN = /^[a-zA-Z0-9-_]+$/;
17
17
  const MAXIMUM_EVENTS = 50;
@@ -51,6 +51,13 @@ export const validateGetStatsPayload = (getStatsRequest: GetStatsRequest) => {
51
51
  validateQueueKey(getStatsRequest.queueName);
52
52
  };
53
53
 
54
+ export const validateCancelJobRequest = (cancelJobRequest: CancelJobRequest) => {
55
+ if (!cancelJobRequest.jobId) {
56
+ throw new JobDoesNotExistError(Text.error.jobIdEmpty);
57
+ }
58
+ validateQueueKey(cancelJobRequest.queueName);
59
+ };
60
+
54
61
  export const validateAPIResponse = async (response: APIResponse, expectedSuccessStatus: number) => {
55
62
  if (response.status === 429) {
56
63
  throw new RateLimitError(Text.error.rateLimitError);
@@ -125,3 +132,11 @@ export const validateGetStatsAPIResponse = async (response: APIResponse, getStat
125
132
 
126
133
  await validateAPIResponse(response, 200);
127
134
  };
135
+
136
+ export const validateCancelJobAPIResponse = async (response: APIResponse, cancelJobRequest: GetStatsRequest) => {
137
+ if (response.status === 404) {
138
+ throw new JobDoesNotExistError(Text.error.jobDoesNotExit(cancelJobRequest.jobId, cancelJobRequest.queueName));
139
+ }
140
+
141
+ await validateAPIResponse(response, 204);
142
+ };
@@ -392,8 +392,8 @@
392
392
  "affectsGlobalScope": false
393
393
  },
394
394
  "./src/types.ts": {
395
- "version": "c9a87ba3c74bfab165eb9297bd840e9aaab6be9fbb6cb0df4269dff6a84ef9ea",
396
- "signature": "ef0271027a212c16d58061d84cab91205077d7cc8f9a6fc2024aef5e8f95fd5b",
395
+ "version": "d899396a1cd22fa15d0aa6157f0cfd2e2e6d4548a26bf78b1ab60f1df3f4a297",
396
+ "signature": "bd30bbb87257959ac77e41c2f1b05f36adc4df30395152b645663c4d27c47cb8",
397
397
  "affectsGlobalScope": false
398
398
  },
399
399
  "./src/errors.ts": {
@@ -402,8 +402,8 @@
402
402
  "affectsGlobalScope": false
403
403
  },
404
404
  "./src/queries.ts": {
405
- "version": "b7e5caa29c0d2c345008aef17299592075b456624de7361b1186faa633ec2128",
406
- "signature": "799be984f8fba263753f97c3bf0a68a22907b7bdbfa94a05ad59af426250bc5d",
405
+ "version": "37ef341ab46e3c19f69adca1eaa01e6d8718492817de0fd6d2ec8c8a12d08a53",
406
+ "signature": "f2c2560bfd355b9314099a4fbf9590389a05a631a0de38c45f58138b62de8373",
407
407
  "affectsGlobalScope": false
408
408
  },
409
409
  "./src/text.ts": {
@@ -412,8 +412,8 @@
412
412
  "affectsGlobalScope": false
413
413
  },
414
414
  "./src/validators.ts": {
415
- "version": "46c89feddc0e1906925367a2093130dbaf98798d472df95970f6715b4cd5c5d3",
416
- "signature": "74384a84caa4d0e5679b15f8e72bad7b657d503e3178ed8b9b87c32f36e3573b",
415
+ "version": "80bad79d153f9cbadb49786888e0bf8afa8b1cade29ddb7a6abf41a549a7d189",
416
+ "signature": "1caad0a449141b7fb074e18fa2b8668551d6cff6b60ca3611b99e98a9269c1b2",
417
417
  "affectsGlobalScope": false
418
418
  },
419
419
  "../../node_modules/@types/uuid/interfaces.d.ts": {
@@ -427,8 +427,8 @@
427
427
  "affectsGlobalScope": false
428
428
  },
429
429
  "./src/jobProgress.ts": {
430
- "version": "1db053b2616c239a60e6db36b3a2d265c468159cfb7e7686a4f6bdb1834cadf8",
431
- "signature": "3c086f330a96725bd587b6a7a17b2b87404ef8a45a3626fd54e67f059a5e3ba3",
430
+ "version": "5e1a2c3330fa7dcfd92a4b12cddfba84ff23110637ed768a2a139568ea966364",
431
+ "signature": "34c50ef91fedd3e185ce8913f72f6aa106e52387267de30bfcc0f6dc61148085",
432
432
  "affectsGlobalScope": false
433
433
  },
434
434
  "./src/queue.ts": {
@@ -452,7 +452,7 @@
452
452
  "affectsGlobalScope": false
453
453
  },
454
454
  "./src/__test__/jobProgress.test.ts": {
455
- "version": "f47b1533e3fa6faf1458a83e25cd26b425e822d01988ec604b7bb2140410d708",
455
+ "version": "21f544b34d81798a4c229e4b8834f69561400e56fb260b94cd533e4223a24740",
456
456
  "signature": "7870ceffd2c069795d2976c13017e1697f28e9a1c994dbd36dc48c21826db61b",
457
457
  "affectsGlobalScope": false
458
458
  },