UNPKG

pubnub

Version:

Publish & Subscribe Real-time Messaging with PubNub

109 lines (92 loc) 2.65 kB
/** * Get Message Actions REST API module. * * @internal */ import { TransportResponse } from '../../types/transport-response'; import * as MessageAction from '../../types/api/message-action'; import { AbstractRequest } from '../../components/request'; import RequestOperation from '../../constants/operations'; import { KeySet, Query } from '../../types/api'; import { encodeString } from '../../utils'; // -------------------------------------------------------- // ------------------------ Types ------------------------- // -------------------------------------------------------- // region Types /** * Request configuration parameters. */ type RequestParameters = MessageAction.GetMessageActionsParameters & { /** * PubNub REST API access key set. */ keySet: KeySet; }; /** * Service success response. */ type ServiceResponse = { /** * Request result status code. */ status: number; /** * Retrieved list of message actions. */ data: MessageAction.MessageAction[]; /** * More message actions fetch information. */ more?: MessageAction.MoreMessageActions; }; // endregion /** * Fetch channel message actions request. * * @internal */ export class GetMessageActionsRequest extends AbstractRequest< MessageAction.GetMessageActionsResponse, ServiceResponse > { constructor(private readonly parameters: RequestParameters) { super(); } operation(): RequestOperation { return RequestOperation.PNGetMessageActionsOperation; } validate(): string | undefined { if (!this.parameters.keySet.subscribeKey) return 'Missing Subscribe Key'; if (!this.parameters.channel) return 'Missing message channel'; } async parse(response: TransportResponse): Promise<MessageAction.GetMessageActionsResponse> { const serviceResponse = this.deserializeResponse(response); let start: string | null = null; let end: string | null = null; if (serviceResponse.data.length > 0) { start = serviceResponse.data[0].actionTimetoken; end = serviceResponse.data[serviceResponse.data.length - 1].actionTimetoken; } return { data: serviceResponse.data, more: serviceResponse.more, start, end, }; } protected get path(): string { const { keySet: { subscribeKey }, channel, } = this.parameters; return `/v1/message-actions/${subscribeKey}/channel/${encodeString(channel)}`; } protected get queryParameters(): Query { const { limit, start, end } = this.parameters; return { ...(start ? { start } : {}), ...(end ? { end } : {}), ...(limit ? { limit } : {}), }; } }