@forge/events
Advanced tools
Comparing version 0.1.0 to 0.2.0-next.0
# @forge/events | ||
## 0.2.0-next.0 | ||
### Minor Changes | ||
- 8dca98b: New configurable settings for Queue push API | ||
## 0.1.0 | ||
@@ -4,0 +10,0 @@ |
@@ -48,2 +48,8 @@ "use strict"; | ||
}); | ||
it('should throw InvalidPushSettingsError for delay', async () => { | ||
const apiClientMock = getApiClientMock(); | ||
const queue = getQueue(apiClientMock, 'name'); | ||
await expect(queue.push(1, { delayInSeconds: 901 })).rejects.toThrow(new errors_1.InvalidPushSettingsError(`Delay in seconds must be between 0 and 900.`)); | ||
expect(apiClientMock).toHaveBeenCalledTimes(0); | ||
}); | ||
it('should throw NoEventsToPushError', async () => { | ||
@@ -50,0 +56,0 @@ const apiClientMock = getApiClientMock(); |
import { FailedEvent } from './types'; | ||
export declare class InvalidPushSettingsError extends Error { | ||
constructor(message: string); | ||
} | ||
export declare class InvalidQueueNameError extends Error { | ||
@@ -3,0 +6,0 @@ constructor(message: string); |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.InternalServerError = exports.PartialSuccessError = exports.RateLimitError = exports.NoEventsToPushError = exports.PayloadTooBigError = exports.TooManyEventsError = exports.InvalidQueueNameError = void 0; | ||
exports.InternalServerError = exports.PartialSuccessError = exports.RateLimitError = exports.NoEventsToPushError = exports.PayloadTooBigError = exports.TooManyEventsError = exports.InvalidQueueNameError = exports.InvalidPushSettingsError = void 0; | ||
class InvalidPushSettingsError extends Error { | ||
constructor(message) { | ||
super(message); | ||
} | ||
} | ||
exports.InvalidPushSettingsError = InvalidPushSettingsError; | ||
class InvalidQueueNameError extends Error { | ||
@@ -5,0 +11,0 @@ constructor(message) { |
@@ -1,2 +0,2 @@ | ||
import { APIResponse, FetchMethod, Payload, QueueParams } from './types'; | ||
import { APIResponse, FetchMethod, Payload, QueueParams, PushSettings } from './types'; | ||
export declare class Queue { | ||
@@ -6,3 +6,3 @@ private readonly apiClient; | ||
constructor(queueParams: QueueParams, apiClient?: FetchMethod); | ||
push(payloads: Payload | Payload[]): Promise<APIResponse>; | ||
push(payloads: Payload | Payload[], pushSettings?: PushSettings): Promise<APIResponse>; | ||
private query; | ||
@@ -9,0 +9,0 @@ private buildRequest; |
@@ -16,3 +16,3 @@ "use strict"; | ||
} | ||
async push(payloads) { | ||
async push(payloads, pushSettings) { | ||
validators_1.validatePayloads(payloads); | ||
@@ -25,2 +25,8 @@ const queryParams = { | ||
}; | ||
if (pushSettings) { | ||
validators_1.validatePushSettings(pushSettings); | ||
if (pushSettings.delayInSeconds) { | ||
queryParams.delayInSeconds = pushSettings.delayInSeconds; | ||
} | ||
} | ||
const requestBody = queries_1.getPushBody(queryParams); | ||
@@ -27,0 +33,0 @@ return this.query(queries_1.PUSH_PATH, requestBody); |
@@ -7,2 +7,5 @@ import { RequestInit, Response } from 'node-fetch'; | ||
}; | ||
export interface PushSettings { | ||
delayInSeconds: number; | ||
} | ||
export interface QueueParams { | ||
@@ -16,2 +19,3 @@ key: string; | ||
type: string; | ||
delayInSeconds?: number; | ||
} | ||
@@ -18,0 +22,0 @@ export interface APIRequest extends PushBodyParams { |
@@ -1,5 +0,6 @@ | ||
import { APIResponse, Payload, APIRequest } from './types'; | ||
import { APIResponse, Payload, APIRequest, PushSettings } from './types'; | ||
export declare const validateQueueName: (queueName: string) => void; | ||
export declare const validatePushSettings: (settings: PushSettings) => void; | ||
export declare const validatePayloads: (payloads: Payload | Payload[]) => void; | ||
export declare const validateAPIResponse: (response: APIResponse, requestBody: APIRequest) => Promise<void>; | ||
//# sourceMappingURL=validators.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.validateAPIResponse = exports.validatePayloads = exports.validateQueueName = void 0; | ||
exports.validateAPIResponse = exports.validatePayloads = exports.validatePushSettings = exports.validateQueueName = void 0; | ||
const errors_1 = require("./errors"); | ||
@@ -13,2 +13,7 @@ const VALID_QUEUE_NAME_PATTERN = /^[a-zA-Z0-9-_]+$/; | ||
}; | ||
exports.validatePushSettings = (settings) => { | ||
if ((settings.delayInSeconds && settings.delayInSeconds > 900) || settings.delayInSeconds < 0) { | ||
throw new errors_1.InvalidPushSettingsError('Delay in seconds must be between 0 and 900.'); | ||
} | ||
}; | ||
exports.validatePayloads = (payloads) => { | ||
@@ -15,0 +20,0 @@ if (!payloads || (Array.isArray(payloads) && payloads.length === 0)) { |
{ | ||
"name": "@forge/events", | ||
"version": "0.1.0", | ||
"version": "0.2.0-next.0", | ||
"description": "Forge Async Event methods", | ||
@@ -5,0 +5,0 @@ "author": "Atlassian", |
@@ -10,3 +10,4 @@ import { Queue } from '../queue'; | ||
RateLimitError, | ||
TooManyEventsError | ||
TooManyEventsError, | ||
InvalidPushSettingsError | ||
} from '../errors'; | ||
@@ -68,2 +69,11 @@ | ||
it('should throw InvalidPushSettingsError for delay', async () => { | ||
const apiClientMock = getApiClientMock(); | ||
const queue = getQueue(apiClientMock, 'name'); | ||
await expect(queue.push(1, { delayInSeconds: 901 })).rejects.toThrow( | ||
new InvalidPushSettingsError(`Delay in seconds must be between 0 and 900.`) | ||
); | ||
expect(apiClientMock).toHaveBeenCalledTimes(0); | ||
}); | ||
it('should throw NoEventsToPushError', async () => { | ||
@@ -70,0 +80,0 @@ const apiClientMock = getApiClientMock(); |
import { FailedEvent } from './types'; | ||
export class InvalidPushSettingsError extends Error { | ||
constructor(message: string) { | ||
super(message); | ||
} | ||
} | ||
export class InvalidQueueNameError extends Error { | ||
@@ -4,0 +10,0 @@ constructor(message: string) { |
import { getPushBody, PUSH_PATH } from './queries'; | ||
import { validateAPIResponse, validatePayloads, validateQueueName } from './validators'; | ||
import { APIResponse, FetchMethod, Payload, PushBodyParams, QueueParams, APIRequest } from './types'; | ||
import { validateAPIResponse, validatePayloads, validateQueueName, validatePushSettings } from './validators'; | ||
import { APIResponse, FetchMethod, Payload, PushBodyParams, QueueParams, APIRequest, PushSettings } from './types'; | ||
@@ -20,3 +20,3 @@ async function getResponseBody(response: APIResponse, body: any): Promise<APIResponse> { | ||
async push(payloads: Payload | Payload[]): Promise<APIResponse> { | ||
async push(payloads: Payload | Payload[], pushSettings?: PushSettings): Promise<APIResponse> { | ||
validatePayloads(payloads); | ||
@@ -30,2 +30,10 @@ | ||
}; | ||
if (pushSettings) { | ||
validatePushSettings(pushSettings); | ||
if (pushSettings.delayInSeconds) { | ||
queryParams.delayInSeconds = pushSettings.delayInSeconds; | ||
} | ||
} | ||
const requestBody = getPushBody(queryParams); | ||
@@ -32,0 +40,0 @@ return this.query(PUSH_PATH, requestBody); |
@@ -7,2 +7,5 @@ import { RequestInit, Response } from 'node-fetch'; | ||
export interface PushSettings { | ||
delayInSeconds: number; | ||
} | ||
export interface QueueParams { | ||
@@ -17,2 +20,3 @@ key: string; | ||
type: string; | ||
delayInSeconds?: number; | ||
} | ||
@@ -19,0 +23,0 @@ |
@@ -8,5 +8,6 @@ import { | ||
RateLimitError, | ||
TooManyEventsError | ||
TooManyEventsError, | ||
InvalidPushSettingsError | ||
} from './errors'; | ||
import { APIResponse, Payload, APIRequest } from './types'; | ||
import { APIResponse, Payload, APIRequest, PushSettings } from './types'; | ||
@@ -23,2 +24,8 @@ const VALID_QUEUE_NAME_PATTERN = /^[a-zA-Z0-9-_]+$/; | ||
export const validatePushSettings = (settings: PushSettings) => { | ||
if ((settings.delayInSeconds && settings.delayInSeconds > 900) || settings.delayInSeconds < 0) { | ||
throw new InvalidPushSettingsError('Delay in seconds must be between 0 and 900.'); | ||
} | ||
}; | ||
export const validatePayloads = (payloads: Payload | Payload[]) => { | ||
@@ -25,0 +32,0 @@ if (!payloads || (Array.isArray(payloads) && payloads.length === 0)) { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
85224
771