swipelime-client-node
Version:
swipelime-client-node is the official swipelime Node.js client library
494 lines (493 loc) • 14.6 kB
TypeScript
import TaskEvent from './models/TaskEvent';
import TaskCommand from './models/TaskCommand';
import SystemAlert from './models/SystemAlert';
/**
* @fileoverview This file contains various types and variables used in the application.
* @module types
*/
/**
* The environment options for the client.
*/
export type Environment = 'live-eu' | 'canary' | 'test' | 'dev';
/**
* An array of all supported languages.
*/
export declare const allLanguages: readonly ["en", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hu", "id", "it", "ja", "ko", "lt", "lv", "nb", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "zh"];
/**
* A union type of all supported languages.
*/
export type AllLanguages = typeof allLanguages[number];
export type LangType = {
[key in AllLanguages]?: string;
};
/**
* The local payment types.
* @cash - Cash payment type.
* @card - Card payment type.
* There can be more local payments so this is not an exhaustive list.
*/
export declare const localPaymentTypes: readonly ["cash", "card"];
/**
* The external payment types.
*/
export declare const externalPaymentTypes: readonly ["external"];
/**
* An array of all supported payment types.
*/
export declare const allPaymentTypes: readonly ["cash", "card", "external"];
/**
* A union type of all supported payment types.
* This includes both local and external payment types.
* Also includes string to allow future extensibility.
*/
export type AllPaymentTypes = typeof allPaymentTypes[number] | string;
/**
* The authentication parameters.
*/
export type AuthParams = {
username: string;
password: string;
};
/**
* The options for the client.
*/
export type ClientOptions = {
environment?: Environment;
reconnectInterval?: number;
};
/**
* The login parameters for DDP (Distributed Data Protocol) login.
*/
export type DDPLoginParams = {
password: string;
user: {
username: string;
};
};
/**
* The user object containing user information.
*/
export type User = {
id: string;
token: string;
tokenExpires: Date;
type: 'password' | 'resume';
};
/**
* The event types for the client.
* @connected - The client is connected to the server.
* @disconnected - The client is disconnected from the server.
* @error - An error occurred.
* @login - The client successfully logged in.
* @logout - The client successfully logged out.
*/
export type ClientEventTypes = {
connected: [];
disconnected: [];
error: [message: string];
login: [user: User];
logout: [];
};
/**
* The base data for a system alert.
*/
export type SystemAlertDataBase = {
systemAlertType: SystemAlertTypes;
} & Record<string, any>;
/**
* Long running tasks that need to be checked.
* @systemAlertType The type of system alert.
* @tasks The tasks that need to be checked.
*/
export interface LongRunningTasks extends SystemAlertDataBase {
systemAlertType: 'long-running-tasks';
tasks: (TaskEvent | TaskCommand)[];
}
export type SystemAlertDataList = LongRunningTasks;
/**
* The event types for the service handler.
* @newTasks - New tasks were received.
* @systemAlert - A system alert was received. List of system alerts can be found in the SystemAlertTypes type.
*/
export type ServiceHandlerEventTypes = {
newTasks: [tasks: (TaskEvent | TaskCommand)[]];
systemAlert: SystemAlert[];
};
/**
* The options for the service handler.
*/
export type ServiceHandlerOptions = {
tenantId: string;
};
/**
* The response for the ping request.
*/
export type PingResponse = 'pong';
/**
* The test data for the API v1 event.
*/
export type apiV1EventTestData = {
test: 'test';
};
/**
* The types of system alerts.
* @longRunningTasks - There are tasks that didn't finish in a reasonable time frame so they need to be checked.
*/
export declare enum SystemAlertType {
'long-running-tasks' = 1
}
/**
* The types of tasks.
*/
export declare enum TaskType {
'event' = 1,
'command' = 2
}
/**
* The status of a task.
*/
export declare enum TaskStatus {
'added' = 1,
'processing' = 2,
'processed' = 3,
'failed' = 4,
'refused' = 5
}
/**
* The types of payment.
*/
export declare enum PaymentTypes {
'card' = 0,
'cash' = 1
}
/**
* The general ID data for an entity.
*/
export type ElementIdData = {
id: string;
externalId?: string;
};
/**
* The general ID with extended data for an entity.
*/
export type ElementIdExtendedData = {
id: string;
price: number;
externalId?: string;
};
/**
* The ID data for a customer.
* @id The unique ID of the customer.
* @position The position of the customer. First customer that joined the table is 1, second is 2, etc.
* If server placed the order the id will be "server" and position will be 0.
*/
export type CustomerData = {
id: string;
position: number;
};
/**
* The options for specifying an ID.
* You can either use the ID or the external ID but at least one must be specified.
*/
export type DataIdType = {
id?: string;
externalId?: string;
};
/**
* The data for an incoming task.
*/
export type IncomingTaskData = {
_id: string;
taskType: TaskType;
status: TaskStatus;
data: TaskEventDataList | TaskCommandDataList;
dateCreated: Date;
dateLastRun: Date | undefined;
retries: number | undefined;
};
/**
* The available command types.
*/
export declare const commandTypes: readonly ["test", "confirm-universal-menu-elements"];
/**
* The types of commands.
*/
export type CommandTypes = typeof commandTypes[number];
/**
* The base data for a task command.
*/
export type TaskCommandDataBase = {
commandType: CommandTypes;
commandData?: Record<string, any>;
timestamp: string;
};
/**
* The data for a test command.
*/
export interface TestCommandData extends TaskCommandDataBase {
commandType: 'test';
}
/**
* The data for confirm universal menu elements command.
*/
export interface ConfirmUniversalMenuElementsCommandData extends TaskCommandDataBase {
commandType: 'confirm-universal-menu-elements';
commandData: {
elements: ElementIdData[];
tableSessionId?: string;
};
}
/**
* The list of task command data.
*/
export type TaskCommandDataList = TestCommandData | ConfirmUniversalMenuElementsCommandData;
/**
* The data for order items.
*/
export type OrderItemsData = {
orderItemId: string;
customerData: CustomerData;
menuItemData: ElementIdExtendedData;
menuData?: ElementIdData;
variantData?: ElementIdExtendedData;
selectablesData?: ElementIdExtendedData[];
status: 'added' | 'pending' | 'confirmed' | 'cancelled' | 'unknown';
quantity: number;
additionalRequests?: string;
};
/**
* The data for an order.
* @tableData The data for the table.
* @tableSessionData The data for the table session.
* @orderItems The order items that were added to the table.
* @paymentDetails If the order was paid, the payment details will be included here.
*/
export type OrderEventData = {
tableData: ElementIdData;
tableSessionData: ElementIdData;
orderItems: OrderItemsData[];
paymentDetails?: OrderPaymentDetailsData;
};
/**
* The available event types.
*/
export declare const eventTypes: readonly ["test", "customer-joined-table", "order-items-added", "order-items-confirmed", "order-items-cancelled", "order-items-changed", "order-items-moved", "payment-requested", "payment-request-cancelled", "order-items-payment-requested", "order-items-payment-confirmed", "order-items-payment-cancelled", "universal-menu-elements-added", "universal-menu-elements-updated", "universal-menu-elements-removed", "tables-added", "tables-updated", "tables-removed"];
/**
* The types of events.
*/
export type EventTypes = typeof eventTypes[number];
/**
* The available system alert types.
*/
export declare const systemAlertTypes: readonly ["long-running-tasks"];
/**
* The types of system alerts.
*/
export type SystemAlertTypes = typeof systemAlertTypes[number];
/**
* The base data for a task event.
*/
export type TaskEventDataBase = {
eventType: EventTypes;
eventData: Record<string, any>;
timestamp: string;
};
/**
* The data for a test event.
*/
export interface TestEventData extends TaskEventDataBase {
eventType: 'test';
eventData: {
test: 'test';
};
}
/**
* The data for a customer joined table event.
*/
export interface CustomerJoinedTableEventData extends TaskEventDataBase {
eventType: 'customer-joined-table';
eventData: {
tableData: ElementIdData;
id: string;
name: string;
language: AllLanguages;
};
}
/**
* The data for order items added, confirmed, cancelled or changed events.
*/
export interface OrderItemsChangedEventData extends TaskEventDataBase {
eventType: 'order-items-added' | 'order-items-confirmed' | 'order-items-cancelled' | 'order-items-changed';
eventData: OrderEventData;
}
/**
* The data for order items moved event.
*/
export interface OrderItemsMovedEventData extends TaskEventDataBase {
eventType: 'order-items-moved';
eventData: {
tableSessionData: ElementIdData;
fromTableData: ElementIdData;
toTableData: ElementIdData;
orderItems: OrderItemsData[];
};
}
export type TaskOrderPaymentFeeType = 'serviceFee' | 'convenienceFee' | 'deliveryFee' | 'other';
export type TaskOrderPaymentFeesType = Partial<Record<TaskOrderPaymentFeeType, {
amount: number;
}>>;
/**
* The data for a payment.
* @paymentId The ID of the payment.
* @paymentType The type of payment.
* @orderItemsPrice The price of the order items including service fee if there is any.
* @tipAmount The tip amount.
* @totalPrice The total price including the tip.
* @needReceipt Whether a receipt is needed.
* @isPaid Whether the payment has already been paid.
* @fees Any additional fees that are not included in the order items price.
*/
interface TaskOrderPaymentDetailsDataBase {
paymentId: string;
paymentType: AllPaymentTypes;
orderItemsPrice: number;
tipAmount: number;
totalPrice: number;
needReceipt: boolean;
isPaid: boolean;
fees?: TaskOrderPaymentFeesType;
}
export interface TaskOrderPaymentDetailsDataInternal extends TaskOrderPaymentDetailsDataBase {
paymentType: typeof localPaymentTypes[number] | string;
}
export interface TaskOrderPaymentDetailsDataExternal extends TaskOrderPaymentDetailsDataBase {
paymentType: 'external';
paymentProcessor: string;
}
export type OrderPaymentDetailsData = TaskOrderPaymentDetailsDataInternal | TaskOrderPaymentDetailsDataExternal;
/**
* The data for a payment event.
* @tableData The data for the table.
* @tableSessionData The data for the table session.
* @orderItems The order items that were paid.
* @paymentDetails The payment details.
*/
export type PaymentEventData = {
tableData: ElementIdData;
tableSessionData: ElementIdData;
orderItems: OrderItemsData[];
paymentDetails: OrderPaymentDetailsData;
};
/**
* @deprecated payment-requested and payment-request-cancelled events are deprecated, use order-items-payment-requested, order-items-payment-confirmed and order-items-payment-cancelled events instead.
* The data for the payment requested event.
*/
export interface PaymentRequestedEventData extends TaskEventDataBase {
eventType: 'payment-requested' | 'payment-request-cancelled';
eventData: {
tableData: ElementIdData;
paymentType: typeof PaymentTypes;
};
}
/**
* The data for a payment requested, confirmed or cancelled event.
*/
export interface PaymentsEventData extends TaskEventDataBase {
eventType: 'order-items-payment-requested' | 'order-items-payment-confirmed' | 'order-items-payment-cancelled';
eventData: PaymentEventData;
}
export interface UniversalMenuElementsEventData extends TaskEventDataBase {
eventType: 'universal-menu-elements-added' | 'universal-menu-elements-updated' | 'universal-menu-elements-removed';
eventData: (UniversalMenuItem | UniversalMenuCategory)[];
}
export interface TablesEventData extends TaskEventDataBase {
eventType: 'tables-added' | 'tables-updated' | 'tables-removed';
eventData: NativeTable[];
}
/**
* The list of task event data.
*/
export type TaskEventDataList = TestEventData | CustomerJoinedTableEventData | OrderItemsChangedEventData | PaymentRequestedEventData | PaymentsEventData | UniversalMenuElementsEventData | TablesEventData | OrderItemsMovedEventData;
export type UniversalMenuItemData = {
id: string;
externalId?: string;
enabled: boolean;
label: LangType;
internalName?: string;
price: number;
description?: LangType;
longDescription?: LangType;
created: string;
updated: string;
};
export type UniversalMenuItem = {
type: 'item';
data: UniversalMenuItemData;
};
export type UniversalMenuCategoryData = {
id: string;
externalId?: string;
enabled: boolean;
label: LangType;
created?: string;
updated?: string;
};
/**
* Represents a universal menu category.
*/
export type UniversalMenuCategory = {
type: 'category';
data: UniversalMenuCategoryData;
};
/**
* Represents a native table.
*/
export type NativeTable = {
id: string;
externalId?: string;
accessCode: string;
label: LangType;
created: string;
updated: string;
};
/**
* Custom order item that can be added to a table
* @orderItemId Optional ID of the ordered item that can be used to identify the order and update / delete it later - if not provided it will be automatically generated
* @label The mandatory label of the order item - one of the supported languages must be provided
* @price The price of the order item
* @quantity The quantity of the order item
* @additionalRequests Optional additional requests for the order item
*/
export type CustomOrderItem = {
orderItemId?: string;
label: LangType;
price: number;
quantity: number;
additionalRequests?: string;
};
export type UpsertUniversalMenuItemsReturn = {
updated: number;
new: number;
unchanged: number;
failed?: number;
failedItems?: {
error: string;
item: Partial<UniversalMenuItemData>;
}[];
};
export type UpsertTablesReturn = {
updated: number;
new: number;
unchanged: number;
failed?: number;
failedTables?: {
error: string;
table: Partial<NativeTable>;
}[];
};
export type CancelOrderItemsReturn = {
cancelled: number;
failed: number;
failedOrderItemIds?: string[];
};
export {};