npm package diff
Package: @forge/events
Versions: 2.0.10-next.0 - 2.0.10-next.0-experimental-4cf7fd3
File: package/out/validators.js
Index: package/out/validators.js
===================================================================
--- package/out/validators.js
+++ package/out/validators.js
@@ -1,48 +1,76 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.validateCancelJobAPIResponse = exports.validateGetStatsAPIResponse = exports.validatePushAPIResponse = exports.validateAPIResponse = exports.validateCancelJobRequest = exports.validateGetStatsPayload = exports.validatePushEvents = exports.validatePushSettings = exports.validateQueueKey = void 0;
+exports.validateCancelJobAPIResponse = exports.validateGetStatsAPIResponse = exports.validatePushAPIResponse = exports.validateFifoResponse = exports.validateAPIResponse = exports.validateCancelJobRequest = exports.validateGetStatsPayload = exports.validatePushEvents = exports.validatePushSettings = exports.validateQueueKeyLength = exports.validateQueueKey = void 0;
 const errors_1 = require("./errors");
 const text_1 = require("./text");
 const VALID_QUEUE_NAME_PATTERN = /^[a-zA-Z0-9-_]+$/;
 const MAXIMUM_EVENTS = 50;
+const MAXIMUM_EVENTS_FIFO = 10;
 const MAXIMUM_PAYLOAD_SIZE_KB = 200;
+const ALLOWED_GROUP_ID = 'fifo-mvp-group';
 const validateQueueKey = (queueName) => {
     if (!queueName || !VALID_QUEUE_NAME_PATTERN.test(queueName)) {
         throw new errors_1.InvalidQueueNameError(text_1.Text.error.invalidQueueName);
     }
 };
 exports.validateQueueKey = validateQueueKey;
+const validateQueueKeyLength = (queueName) => {
+    if (queueName.length > 36) {
+        throw new errors_1.InvalidQueueNameError(text_1.Text.error.queueNameExceedingMaxLimit);
+    }
+};
+exports.validateQueueKeyLength = validateQueueKeyLength;
 const validatePushSettings = (event) => {
     if ((event.delayInSeconds && event.delayInSeconds > 900) || (event.delayInSeconds && event.delayInSeconds < 0)) {
         throw new errors_1.InvalidPushSettingsError(text_1.Text.error.invalidDelayInSecondsSetting);
     }
 };
 exports.validatePushSettings = validatePushSettings;
-function validatePushEvents(arg) {
+function validatePushEvents(arg, isFifo) {
     const events = Array.isArray(arg) ? arg : [arg];
     if (events.length === 0) {
         throw new errors_1.NoEventsToPushError(text_1.Text.error.noEventsPushed);
     }
-    if (events.length > MAXIMUM_EVENTS) {
-        throw new errors_1.TooManyEventsError(text_1.Text.error.maxEventsAllowed(MAXIMUM_EVENTS));
+    const maxAllowed = isFifo ? MAXIMUM_EVENTS_FIFO : MAXIMUM_EVENTS;
+    if (events.length > maxAllowed) {
+        throw new errors_1.TooManyEventsError(text_1.Text.error.maxEventsAllowed(maxAllowed));
     }
     for (const event of events) {
         if (typeof event !== 'object' || Array.isArray(event) || event === null) {
             throw new errors_1.InvalidPayloadError(text_1.Text.error.invalidEvent);
         }
         if (typeof event.body !== 'object' || Array.isArray(event.body) || event.body === null) {
             throw new errors_1.InvalidPayloadError(text_1.Text.error.invalidEventBody);
         }
-        (0, exports.validatePushSettings)(event);
+        if (!isFifo) {
+            (0, exports.validatePushSettings)(event);
+        }
     }
     const payloadSizeKB = Buffer.byteLength(JSON.stringify(events)) / 1024;
     if (payloadSizeKB > MAXIMUM_PAYLOAD_SIZE_KB) {
         throw new errors_1.PayloadTooBigError(text_1.Text.error.maxPayloadAllowed(MAXIMUM_PAYLOAD_SIZE_KB));
     }
+    if (isFifo) {
+        validateFifoEvents(events);
+    }
     return events;
 }
 exports.validatePushEvents = validatePushEvents;
+function validateFifoEvents(events) {
+    if (!allEventsHaveValidGroupId(events)) {
+        throw new errors_1.InvalidGroupIdError(text_1.Text.error.invalidGroupId(ALLOWED_GROUP_ID));
+    }
+    if (!allEventsHaveValidEventId(events)) {
+        throw new errors_1.InvalidEventIdError(text_1.Text.error.invalidEventId);
+    }
+}
+function allEventsHaveValidGroupId(events, allowedGroupId = ALLOWED_GROUP_ID) {
+    return events.every((event) => event.groupId != null && event.groupId === allowedGroupId);
+}
+function allEventsHaveValidEventId(events) {
+    return events.every((event) => event.eventId?.trim().length <= 36);
+}
 const validateGetStatsPayload = (getStatsRequest) => {
     if (!getStatsRequest.jobId) {
         throw new errors_1.JobDoesNotExistError(text_1.Text.error.jobIdEmpty);
     }
@@ -77,8 +105,22 @@
         throw internalServerError;
     }
 };
 exports.validateAPIResponse = validateAPIResponse;
+const validateFifoResponse = async (requestBody, response) => {
+    if (!response.ok) {
+        return {
+            type: 'error',
+            errorMessage: response.statusText,
+            status: response.status
+        };
+    }
+    return {
+        type: 'success',
+        status: response.status
+    };
+};
+exports.validateFifoResponse = validateFifoResponse;
 const validatePushAPIResponse = async (requestBody, response, result) => {
     if (response.status === 413) {
         const responseBody = await response.json();
         throw new errors_1.PayloadTooBigError(responseBody.errorMessage);
@@ -91,9 +133,9 @@
             partialSuccessError.message = `Failed to process ${responseBody.failedEvents.length} event(s).`;
             partialSuccessError.failedEvents = responseBody.failedEvents.map((failedEvent) => {
                 return {
                     errorMessage: failedEvent.errorMessage,
-                    payload: requestBody.payload[+failedEvent.index]
+                    payload: requestBody.payload != null && requestBody.payload[+failedEvent.index]
                 };
             });
         }
         if (responseBody.errorMessage) {