pubnub
Version:
Publish & Subscribe Real-time Messaging with PubNub
1,309 lines (1,185 loc) • 58.1 kB
text/typescript
/**
* PubNub Objects API module.
*/
import { GetAllChannelsMetadataRequest } from './endpoints/objects/channel/get_all';
import { RemoveChannelMetadataRequest } from './endpoints/objects/channel/remove';
import { GetUUIDMembershipsRequest } from './endpoints/objects/membership/get';
import { SetUUIDMembershipsRequest } from './endpoints/objects/membership/set';
import { GetAllUUIDMetadataRequest } from './endpoints/objects/uuid/get_all';
import { GetChannelMetadataRequest } from './endpoints/objects/channel/get';
import { SetChannelMetadataRequest } from './endpoints/objects/channel/set';
import { RemoveUUIDMetadataRequest } from './endpoints/objects/uuid/remove';
import { GetChannelMembersRequest } from './endpoints/objects/member/get';
import { SetChannelMembersRequest } from './endpoints/objects/member/set';
import { KeySet, ResultCallback, SendRequestFunction } from './types/api';
import { GetUUIDMetadataRequest } from './endpoints/objects/uuid/get';
import { PrivateClientConfiguration } from './interfaces/configuration';
import * as AppContext from './types/api/app-context';
import { ChannelMetadataObject } from './types/api/app-context';
import { SetUUIDMetadataRequest } from './endpoints/objects/uuid/set';
import { LoggerManager } from './components/logger-manager';
/**
* PubNub App Context API interface.
*/
export default class PubNubObjects {
/**
* Extended PubNub client configuration object.
*
* @internal
*/
private readonly configuration: PrivateClientConfiguration;
/* eslint-disable @typescript-eslint/no-explicit-any */
/**
* Function which should be used to send REST API calls.
*
* @internal
*/
private readonly sendRequest: SendRequestFunction<any, any>;
/**
* REST API endpoints access credentials.
*
* @internal
*/
private readonly keySet: KeySet;
/**
* Create app context API access object.
*
* @param configuration - Extended PubNub client configuration object.
* @param sendRequest - Function which should be used to send REST API calls.
*
* @internal
*/
constructor(
configuration: PrivateClientConfiguration,
/* eslint-disable @typescript-eslint/no-explicit-any */
sendRequest: SendRequestFunction<any, any>,
) {
this.keySet = configuration.keySet;
this.configuration = configuration;
this.sendRequest = sendRequest;
}
/**
* Get registered loggers' manager.
*
* @returns Registered loggers' manager.
*
* @internal
*/
get logger(): LoggerManager {
return this.configuration.logger();
}
// --------------------------------------------------------
// ----------------------- UUID API -----------------------
// --------------------------------------------------------
// region UUID API
// region Get Metadata
/**
* Fetch a paginated list of UUID Metadata objects.
*
* @param callback - Request completion handler callback.
*/
public getAllUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
callback: ResultCallback<AppContext.GetAllUUIDMetadataResponse<Custom>>,
): void;
/**
* Fetch a paginated list of UUID Metadata objects.
*
* @param parameters - Request configuration parameters.
* @param callback - Request completion handler callback.
*/
public getAllUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.GetAllMetadataParameters<AppContext.UUIDMetadataObject<Custom>>,
callback: ResultCallback<AppContext.GetAllUUIDMetadataResponse<Custom>>,
): void;
/**
* Fetch a paginated list of UUID Metadata objects.
*
* @param [parameters] - Request configuration parameters.
*
* @returns Asynchronous get all UUID metadata response.
*/
public async getAllUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters?: AppContext.GetAllMetadataParameters<AppContext.UUIDMetadataObject<Custom>>,
): Promise<AppContext.GetAllUUIDMetadataResponse<Custom>>;
/**
* Fetch a paginated list of UUID Metadata objects.
*
* @param [parametersOrCallback] - Request configuration parameters or callback from overload.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous get all UUID metadata response or `void` in case if `callback` provided.
*/
async getAllUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parametersOrCallback?:
| AppContext.GetAllMetadataParameters<AppContext.UUIDMetadataObject<Custom>>
| ResultCallback<AppContext.GetAllUUIDMetadataResponse<Custom>>,
callback?: ResultCallback<AppContext.GetAllUUIDMetadataResponse<Custom>>,
): Promise<AppContext.GetAllUUIDMetadataResponse<Custom> | void> {
this.logger.debug('PubNub', () => ({
messageType: 'object',
message: !parametersOrCallback || typeof parametersOrCallback === 'function' ? {} : parametersOrCallback,
details: `Get all UUID metadata objects with parameters:`,
}));
return this._getAllUUIDMetadata(parametersOrCallback, callback);
}
/**
* Fetch a paginated list of UUID Metadata objects.
*
* @param [parametersOrCallback] - Request configuration parameters or callback from overload.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous get all UUID metadata response or `void` in case if `callback` provided.
*
* @internal
*/
async _getAllUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parametersOrCallback?:
| AppContext.GetAllMetadataParameters<AppContext.UUIDMetadataObject<Custom>>
| ResultCallback<AppContext.GetAllUUIDMetadataResponse<Custom>>,
callback?: ResultCallback<AppContext.GetAllUUIDMetadataResponse<Custom>>,
): Promise<AppContext.GetAllUUIDMetadataResponse<Custom> | void> {
// Get user request parameters.
const parameters: AppContext.GetAllMetadataParameters<AppContext.UUIDMetadataObject<Custom>> =
parametersOrCallback && typeof parametersOrCallback !== 'function' ? parametersOrCallback : {};
callback ??= typeof parametersOrCallback === 'function' ? parametersOrCallback : undefined;
const request = new GetAllUUIDMetadataRequest({ ...parameters, keySet: this.keySet });
const logResponse = (response: AppContext.GetAllUUIDMetadataResponse<Custom> | null) => {
if (!response) return;
this.logger.debug(
'PubNub',
`Get all UUID metadata success. Received ${response.totalCount} UUID metadata objects.`,
);
};
if (callback)
return this.sendRequest(request, (status, response) => {
logResponse(response);
callback(status, response);
});
return this.sendRequest(request).then((response) => {
logResponse(response);
return response;
});
}
/**
* Fetch a UUID Metadata object for the currently configured PubNub client `uuid`.
*
* @param callback - Request completion handler callback.
*/
public getUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
callback: ResultCallback<AppContext.GetUUIDMetadataResponse<Custom>>,
): void;
/**
* Fetch a specific UUID Metadata object.
*
* @param parameters - Request configuration parameters. Will fetch a UUID metadata object for
* a currently configured PubNub client `uuid` if not set.
* @param callback - Request completion handler callback.
*/
public getUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.GetUUIDMetadataParameters,
callback: ResultCallback<AppContext.GetUUIDMetadataResponse<Custom>>,
): void;
/**
* Fetch a specific UUID Metadata object.
*
* @param [parameters] - Request configuration parameters. Will fetch UUID Metadata object for
* currently configured PubNub client `uuid` if not set.
*
* @returns Asynchronous get UUID metadata response.
*/
public async getUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters?: AppContext.GetUUIDMetadataParameters,
): Promise<AppContext.GetUUIDMetadataResponse<Custom>>;
/**
* Fetch a specific UUID Metadata object.
*
* @param [parametersOrCallback] - Request configuration parameters or callback from overload.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous get UUID metadata response or `void` in case if `callback` provided.
*/
async getUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parametersOrCallback?:
| AppContext.GetUUIDMetadataParameters
| ResultCallback<AppContext.GetUUIDMetadataResponse<Custom>>,
callback?: ResultCallback<AppContext.GetUUIDMetadataResponse<Custom>>,
): Promise<AppContext.GetUUIDMetadataResponse<Custom> | void> {
this.logger.debug('PubNub', () => ({
messageType: 'object',
message:
!parametersOrCallback || typeof parametersOrCallback === 'function'
? { uuid: this.configuration.userId }
: parametersOrCallback,
details: `Get ${
!parametersOrCallback || typeof parametersOrCallback === 'function' ? ' current' : ''
} UUID metadata object with parameters:`,
}));
return this._getUUIDMetadata(parametersOrCallback, callback);
}
/**
* Fetch a specific UUID Metadata object.
*
* @param [parametersOrCallback] - Request configuration parameters or callback from overload.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous get UUID metadata response or `void` in case if `callback` provided.
*
* @internal
*/
async _getUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parametersOrCallback?:
| AppContext.GetUUIDMetadataParameters
| ResultCallback<AppContext.GetUUIDMetadataResponse<Custom>>,
callback?: ResultCallback<AppContext.GetUUIDMetadataResponse<Custom>>,
): Promise<AppContext.GetUUIDMetadataResponse<Custom> | void> {
// Get user request parameters.
const parameters: AppContext.GetUUIDMetadataParameters =
parametersOrCallback && typeof parametersOrCallback !== 'function' ? parametersOrCallback : {};
callback ??= typeof parametersOrCallback === 'function' ? parametersOrCallback : undefined;
if (parameters.userId) {
this.logger.warn('PubNub', `'userId' parameter is deprecated. Use 'uuid' instead.`);
parameters.uuid = parameters.userId;
}
parameters.uuid ??= this.configuration.userId;
const request = new GetUUIDMetadataRequest({ ...parameters, keySet: this.keySet });
const logResponse = (response: AppContext.GetUUIDMetadataResponse<Custom> | null) => {
if (!response) return;
this.logger.debug(
'PubNub',
`Get UUID metadata object success. Received '${parameters.uuid}' UUID metadata object.`,
);
};
if (callback)
return this.sendRequest(request, (status, response) => {
logResponse(response);
callback(status, response);
});
return this.sendRequest(request).then((response) => {
logResponse(response);
return response;
});
}
// endregion
// region Set Metadata
/**
* Update a specific UUID Metadata object.
*
* @param parameters - Request configuration parameters. Will set UUID metadata for a currently
* configured PubNub client `uuid` if not set.
* @param callback - Request completion handler callback.
*/
public setUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.SetUUIDMetadataParameters<Custom>,
callback: ResultCallback<AppContext.SetUUIDMetadataResponse<Custom>>,
): void;
/**
* Update specific UUID Metadata object.
*
* @param parameters - Request configuration parameters. Will set UUID metadata for currently
* configured PubNub client `uuid` if not set.
*
* @returns Asynchronous set UUID metadata response.
*/
public async setUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.SetUUIDMetadataParameters<Custom>,
): Promise<AppContext.SetUUIDMetadataResponse<Custom>>;
/**
* Update a specific UUID Metadata object.
*
* @param parameters - Request configuration parameters. Will set UUID metadata for currently
* configured PubNub client `uuid` if not set.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous set UUID metadata response or `void` in case if `callback` provided.
*/
async setUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.SetUUIDMetadataParameters<Custom>,
callback?: ResultCallback<AppContext.SetUUIDMetadataResponse<Custom>>,
): Promise<AppContext.SetUUIDMetadataResponse<Custom> | void> {
this.logger.debug('PubNub', () => ({
messageType: 'object',
message: { ...parameters },
details: `Set UUID metadata object with parameters:`,
}));
return this._setUUIDMetadata(parameters, callback);
}
/**
* Update a specific UUID Metadata object.
*
* @internal
*
* @param parameters - Request configuration parameters. Will set UUID metadata for currently
* configured PubNub client `uuid` if not set.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous set UUID metadata response or `void` in case if `callback` provided.
*/
async _setUUIDMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.SetUUIDMetadataParameters<Custom>,
callback?: ResultCallback<AppContext.SetUUIDMetadataResponse<Custom>>,
): Promise<AppContext.SetUUIDMetadataResponse<Custom> | void> {
if (parameters.userId) {
this.logger.warn('PubNub', `'userId' parameter is deprecated. Use 'uuid' instead.`);
parameters.uuid = parameters.userId;
}
parameters.uuid ??= this.configuration.userId;
const request = new SetUUIDMetadataRequest({ ...parameters, keySet: this.keySet });
const logResponse = (response: AppContext.SetUUIDMetadataResponse<Custom> | null) => {
if (!response) return;
this.logger.debug(
'PubNub',
`Set UUID metadata object success. Updated '${parameters.uuid}' UUID metadata object.`,
);
};
if (callback)
return this.sendRequest(request, (status, response) => {
logResponse(response);
callback(status, response);
});
return this.sendRequest(request).then((response) => {
logResponse(response);
return response;
});
}
// endregion
// region Remove Metadata
/**
* Remove a UUID Metadata object for currently configured PubNub client `uuid`.
*
* @param callback - Request completion handler callback.
*/
public removeUUIDMetadata(callback: ResultCallback<AppContext.RemoveUUIDMetadataResponse>): void;
/**
* Remove a specific UUID Metadata object.
*
* @param parameters - Request configuration parameters. Will remove UUID metadata for currently
* configured PubNub client `uuid` if not set.
* @param callback - Request completion handler callback.
*/
public removeUUIDMetadata(
parameters: AppContext.RemoveUUIDMetadataParameters,
callback: ResultCallback<AppContext.RemoveUUIDMetadataResponse>,
): void;
/**
* Remove a specific UUID Metadata object.
*
* @param [parameters] - Request configuration parameters. Will remove UUID metadata for currently
* configured PubNub client `uuid` if not set.
*
* @returns Asynchronous UUID metadata remove response.
*/
public async removeUUIDMetadata(
parameters?: AppContext.RemoveUUIDMetadataParameters,
): Promise<AppContext.RemoveUUIDMetadataResponse>;
/**
* Remove a specific UUID Metadata object.
*
* @param [parametersOrCallback] - Request configuration parameters or callback from overload.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous UUID metadata remove response or `void` in case if `callback` provided.
*/
public async removeUUIDMetadata(
parametersOrCallback?:
| AppContext.RemoveUUIDMetadataParameters
| ResultCallback<AppContext.RemoveUUIDMetadataResponse>,
callback?: ResultCallback<AppContext.RemoveUUIDMetadataResponse>,
): Promise<AppContext.RemoveUUIDMetadataResponse | void> {
this.logger.debug('PubNub', () => ({
messageType: 'object',
message:
!parametersOrCallback || typeof parametersOrCallback === 'function'
? { uuid: this.configuration.userId }
: parametersOrCallback,
details: `Remove${
!parametersOrCallback || typeof parametersOrCallback === 'function' ? ' current' : ''
} UUID metadata object with parameters:`,
}));
return this._removeUUIDMetadata(parametersOrCallback, callback);
}
/**
* Remove a specific UUID Metadata object.
*
* @internal
*
* @param [parametersOrCallback] - Request configuration parameters or callback from overload.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous UUID metadata remove response or `void` in case if `callback` provided.
*/
public async _removeUUIDMetadata(
parametersOrCallback?:
| AppContext.RemoveUUIDMetadataParameters
| ResultCallback<AppContext.RemoveUUIDMetadataResponse>,
callback?: ResultCallback<AppContext.RemoveUUIDMetadataResponse>,
): Promise<AppContext.RemoveUUIDMetadataResponse | void> {
// Get user request parameters.
const parameters: AppContext.RemoveUUIDMetadataParameters =
parametersOrCallback && typeof parametersOrCallback !== 'function' ? parametersOrCallback : {};
callback ??= typeof parametersOrCallback === 'function' ? parametersOrCallback : undefined;
if (parameters.userId) {
this.logger.warn('PubNub', `'userId' parameter is deprecated. Use 'uuid' instead.`);
parameters.uuid = parameters.userId;
}
parameters.uuid ??= this.configuration.userId;
const request = new RemoveUUIDMetadataRequest({ ...parameters, keySet: this.keySet });
const logResponse = (response: AppContext.RemoveUUIDMetadataResponse | null) => {
if (!response) return;
this.logger.debug(
'PubNub',
`Remove UUID metadata object success. Removed '${parameters.uuid}' UUID metadata object.`,
);
};
if (callback)
return this.sendRequest(request, (status, response: AppContext.RemoveUUIDMetadataResponse | null) => {
logResponse(response);
callback(status, response);
});
return this.sendRequest(request).then((response) => {
logResponse(response);
return response;
});
}
// endregion
// endregion
// --------------------------------------------------------
// --------------------- Channel API ----------------------
// --------------------------------------------------------
// region Channel API
// region Get Metadata
/**
* Fetch a paginated list of Channel Metadata objects.
*
* @param callback - Request completion handler callback.
*/
public getAllChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
callback: ResultCallback<AppContext.GetAllChannelMetadataResponse<Custom>>,
): void;
/**
* Fetch a paginated list of Channel Metadata objects.
*
* @param parameters - Request configuration parameters.
* @param callback - Request completion handler callback.
*/
public getAllChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.GetAllMetadataParameters<AppContext.ChannelMetadataObject<Custom>>,
callback: ResultCallback<AppContext.GetAllChannelMetadataResponse<Custom>>,
): void;
/**
* Fetch a paginated list of Channel Metadata objects.
*
* @param [parameters] - Request configuration parameters.
*
* @returns Asynchronous get all Channel metadata response.
*/
public async getAllChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters?: AppContext.GetAllMetadataParameters<AppContext.ChannelMetadataObject<Custom>>,
): Promise<AppContext.GetAllChannelMetadataResponse<Custom>>;
/**
* Fetch a paginated list of Channel Metadata objects.
*
* @param [parametersOrCallback] - Request configuration parameters or callback from overload.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous get all Channel metadata response or `void` in case if `callback`
* provided.
*/
async getAllChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parametersOrCallback?:
| AppContext.GetAllMetadataParameters<AppContext.ChannelMetadataObject<Custom>>
| ResultCallback<AppContext.GetAllChannelMetadataResponse<Custom>>,
callback?: ResultCallback<AppContext.GetAllChannelMetadataResponse<Custom>>,
): Promise<AppContext.GetAllChannelMetadataResponse<Custom> | void> {
this.logger.debug('PubNub', () => ({
messageType: 'object',
message: !parametersOrCallback || typeof parametersOrCallback === 'function' ? {} : parametersOrCallback,
details: `Get all Channel metadata objects with parameters:`,
}));
return this._getAllChannelMetadata(parametersOrCallback, callback);
}
/**
* Fetch a paginated list of Channel Metadata objects.
*
* @internal
*
* @param [parametersOrCallback] - Request configuration parameters or callback from overload.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous get all Channel metadata response or `void` in case if `callback`
* provided.
*/
async _getAllChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parametersOrCallback?:
| AppContext.GetAllMetadataParameters<AppContext.ChannelMetadataObject<Custom>>
| ResultCallback<AppContext.GetAllChannelMetadataResponse<Custom>>,
callback?: ResultCallback<AppContext.GetAllChannelMetadataResponse<Custom>>,
): Promise<AppContext.GetAllChannelMetadataResponse<Custom> | void> {
// Get user request parameters.
const parameters: AppContext.GetAllMetadataParameters<AppContext.ChannelMetadataObject<Custom>> =
parametersOrCallback && typeof parametersOrCallback !== 'function' ? parametersOrCallback : {};
callback ??= typeof parametersOrCallback === 'function' ? parametersOrCallback : undefined;
const request = new GetAllChannelsMetadataRequest({ ...parameters, keySet: this.keySet });
const logResponse = (response: AppContext.GetAllChannelMetadataResponse<Custom> | null) => {
if (!response) return;
this.logger.debug(
'PubNub',
`Get all Channel metadata objects success. Received ${response.totalCount} Channel metadata objects.`,
);
};
if (callback)
return this.sendRequest(request, (status, response) => {
logResponse(response);
callback(status, response);
});
return this.sendRequest(request).then((response) => {
logResponse(response);
return response;
});
}
/**
* Fetch Channel Metadata object.
*
* @param parameters - Request configuration parameters.
* @param callback - Request completion handler callback.
*/
public getChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.GetChannelMetadataParameters,
callback: ResultCallback<AppContext.GetChannelMetadataResponse<Custom>>,
): void;
/**
* Fetch a specific Channel Metadata object.
*
* @param parameters - Request configuration parameters.
*
* @returns Asynchronous get Channel metadata response.
*/
public async getChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.GetChannelMetadataParameters,
): Promise<AppContext.GetChannelMetadataResponse<Custom>>;
/**
* Fetch Channel Metadata object.
*
* @param parameters - Request configuration parameters.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous get Channel metadata response or `void` in case if `callback` provided.
*/
async getChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.GetChannelMetadataParameters,
callback?: ResultCallback<AppContext.GetChannelMetadataResponse<Custom>>,
): Promise<AppContext.GetChannelMetadataResponse<Custom> | void> {
this.logger.debug('PubNub', () => ({
messageType: 'object',
message: { ...parameters },
details: `Get Channel metadata object with parameters:`,
}));
return this._getChannelMetadata(parameters, callback);
}
/**
* Fetch Channel Metadata object.
*
* @internal
*
* @param parameters - Request configuration parameters.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous get Channel metadata response or `void` in case if `callback` provided.
*/
async _getChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.GetChannelMetadataParameters,
callback?: ResultCallback<AppContext.GetChannelMetadataResponse<Custom>>,
): Promise<AppContext.GetChannelMetadataResponse<Custom> | void> {
const request = new GetChannelMetadataRequest({ ...parameters, keySet: this.keySet });
const logResponse = (response: AppContext.GetChannelMetadataResponse<Custom> | null) => {
if (!response) return;
this.logger.debug(
'PubNub',
`Get Channel metadata object success. Received '${parameters.channel}' Channel metadata object.`,
);
};
if (callback)
return this.sendRequest(request, (status, response) => {
logResponse(response);
callback(status, response);
});
return this.sendRequest(request).then((response) => {
logResponse(response);
return response;
});
}
// endregion
// region Set Metadata
/**
* Update specific Channel Metadata object.
*
* @param parameters - Request configuration parameters.
* @param callback - Request completion handler callback.
*/
public setChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.SetChannelMetadataParameters<Custom>,
callback: ResultCallback<AppContext.SetChannelMetadataResponse<Custom>>,
): void;
/**
* Update specific Channel Metadata object.
*
* @param parameters - Request configuration parameters.
*
* @returns Asynchronous set Channel metadata response.
*/
public async setChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.SetChannelMetadataParameters<Custom>,
): Promise<AppContext.SetChannelMetadataResponse<Custom>>;
/**
* Update specific Channel Metadata object.
*
* @param parameters - Request configuration parameters.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous set Channel metadata response or `void` in case if `callback` provided.
*/
async setChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.SetChannelMetadataParameters<Custom>,
callback?: ResultCallback<AppContext.SetChannelMetadataResponse<Custom>>,
): Promise<AppContext.SetChannelMetadataResponse<Custom> | void> {
this.logger.debug('PubNub', () => ({
messageType: 'object',
message: { ...parameters },
details: `Set Channel metadata object with parameters:`,
}));
return this._setChannelMetadata(parameters, callback);
}
/**
* Update specific Channel Metadata object.
*
* @internal
*
* @param parameters - Request configuration parameters.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous set Channel metadata response or `void` in case if `callback` provided.
*/
async _setChannelMetadata<Custom extends AppContext.CustomData = AppContext.CustomData>(
parameters: AppContext.SetChannelMetadataParameters<Custom>,
callback?: ResultCallback<AppContext.SetChannelMetadataResponse<Custom>>,
): Promise<AppContext.SetChannelMetadataResponse<Custom> | void> {
const request = new SetChannelMetadataRequest({ ...parameters, keySet: this.keySet });
const logResponse = (response: AppContext.SetChannelMetadataResponse<Custom> | null) => {
if (!response) return;
this.logger.debug(
'PubNub',
`Set Channel metadata object success. Updated '${parameters.channel}' Channel metadata object.`,
);
};
if (callback)
return this.sendRequest(request, (status, response: AppContext.SetChannelMetadataResponse<Custom> | null) => {
logResponse(response);
callback(status, response);
});
return this.sendRequest(request).then((response: AppContext.SetChannelMetadataResponse<Custom>) => {
logResponse(response);
return response;
});
}
// endregion
// region Remove Metadata
/**
* Remove Channel Metadata object.
*
* @param parameters - Request configuration parameters.
* @param callback - Request completion handler callback.
*/
public removeChannelMetadata(
parameters: AppContext.RemoveChannelMetadataParameters,
callback: ResultCallback<AppContext.RemoveChannelMetadataResponse>,
): void;
/**
* Remove a specific Channel Metadata object.
*
* @param parameters - Request configuration parameters.
*
* @returns Asynchronous Channel metadata remove response.
*/
public async removeChannelMetadata(
parameters: AppContext.RemoveChannelMetadataParameters,
): Promise<AppContext.RemoveChannelMetadataResponse>;
/**
* Remove a specific Channel Metadata object.
*
* @param parameters - Request configuration parameters.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous Channel metadata remove response or `void` in case if `callback`
* provided.
*/
async removeChannelMetadata(
parameters: AppContext.RemoveChannelMetadataParameters,
callback?: ResultCallback<AppContext.RemoveChannelMetadataResponse>,
): Promise<AppContext.RemoveChannelMetadataResponse | void> {
this.logger.debug('PubNub', () => ({
messageType: 'object',
message: { ...parameters },
details: `Remove Channel metadata object with parameters:`,
}));
return this._removeChannelMetadata(parameters, callback);
}
/**
* Remove a specific Channel Metadata object.
*
* @internal
*
* @param parameters - Request configuration parameters.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous Channel metadata remove response or `void` in case if `callback`
* provided.
*/
async _removeChannelMetadata(
parameters: AppContext.RemoveChannelMetadataParameters,
callback?: ResultCallback<AppContext.RemoveChannelMetadataResponse>,
): Promise<AppContext.RemoveChannelMetadataResponse | void> {
const request = new RemoveChannelMetadataRequest({ ...parameters, keySet: this.keySet });
const logResponse = (response: AppContext.RemoveChannelMetadataResponse | null) => {
if (!response) return;
this.logger.debug(
'PubNub',
`Remove Channel metadata object success. Removed '${parameters.channel}' Channel metadata object.`,
);
};
if (callback)
return this.sendRequest(request, (status, response: AppContext.RemoveChannelMetadataResponse | null) => {
logResponse(response);
callback(status, response);
});
return this.sendRequest(request).then((response) => {
logResponse(response);
return response;
});
}
// endregion
// endregion
// --------------------------------------------------------
// -------------- Members / Membership API ----------------
// --------------------------------------------------------
// region Members API
// region Get Members
/**
* Fetch a paginated list of Channel Member objects.
*
* @param parameters - Request configuration parameters.
* @param callback - Request completion handler callback.
*/
public getChannelMembers<
MemberCustom extends AppContext.CustomData = AppContext.CustomData,
UUIDCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.GetMembersParameters,
callback: ResultCallback<AppContext.GetMembersResponse<MemberCustom, UUIDCustom>>,
): void;
/**
* Fetch a paginated list of Channel Member objects.
*
* @param parameters - Request configuration parameters.
*
* @returns Asynchronous get Channel Members response.
*/
public async getChannelMembers<
MemberCustom extends AppContext.CustomData = AppContext.CustomData,
UUIDCustom extends AppContext.CustomData = AppContext.CustomData,
>(parameters: AppContext.GetMembersParameters): Promise<AppContext.GetMembersResponse<MemberCustom, UUIDCustom>>;
/**
* Fetch a paginated list of Channel Member objects.
*
* @param parameters - Request configuration parameters.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous get Channel Members response or `void` in case if `callback` provided.
*/
async getChannelMembers<
MemberCustom extends AppContext.CustomData = AppContext.CustomData,
UUIDCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.GetMembersParameters,
callback?: ResultCallback<AppContext.GetMembersResponse<MemberCustom, UUIDCustom>>,
): Promise<AppContext.GetMembersResponse<MemberCustom, UUIDCustom> | void> {
this.logger.debug('PubNub', () => ({
messageType: 'object',
message: { ...parameters },
details: `Get channel members with parameters:`,
}));
const request = new GetChannelMembersRequest({ ...parameters, keySet: this.keySet });
const logResponse = (response: AppContext.GetMembersResponse<MemberCustom, UUIDCustom> | null) => {
if (!response) return;
this.logger.debug('PubNub', `Get channel members success. Received ${response.totalCount} channel members.`);
};
if (callback)
return this.sendRequest(
request,
(status, response: AppContext.GetMembersResponse<MemberCustom, UUIDCustom> | null) => {
logResponse(response);
callback(status, response);
},
);
return this.sendRequest(request).then((response: AppContext.GetMembersResponse<MemberCustom, UUIDCustom>) => {
logResponse(response);
return response;
});
}
// endregion
// region Set Members
/**
* Update specific Channel Members list.
*
* @param parameters - Request configuration parameters.
* @param callback - Request completion handler callback.
*/
public setChannelMembers<
MemberCustom extends AppContext.CustomData = AppContext.CustomData,
UUIDCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.SetChannelMembersParameters<MemberCustom>,
callback: ResultCallback<AppContext.SetMembersResponse<MemberCustom, UUIDCustom>>,
): void;
/**
* Update specific Channel Members list.
*
* @param parameters - Request configuration parameters.
*
* @returns Asynchronous update Channel Members list response.
*/
public async setChannelMembers<
MemberCustom extends AppContext.CustomData = AppContext.CustomData,
UUIDCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.SetChannelMembersParameters<MemberCustom>,
): Promise<AppContext.SetMembersResponse<MemberCustom, UUIDCustom>>;
/**
* Update specific Channel Members list.
*
* @param parameters - Request configuration parameters.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous update Channel members list response or `void` in case if `callback`
* provided.
*/
async setChannelMembers<
MemberCustom extends AppContext.CustomData = AppContext.CustomData,
UUIDCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.SetChannelMembersParameters<MemberCustom>,
callback?: ResultCallback<AppContext.SetMembersResponse<MemberCustom, UUIDCustom>>,
): Promise<AppContext.SetMembersResponse<MemberCustom, UUIDCustom> | void> {
this.logger.debug('PubNub', () => ({
messageType: 'object',
message: { ...parameters },
details: `Set channel members with parameters:`,
}));
const request = new SetChannelMembersRequest({ ...parameters, type: 'set', keySet: this.keySet });
const logResponse = (response: AppContext.SetMembersResponse<MemberCustom, UUIDCustom> | null) => {
if (!response) return;
this.logger.debug('PubNub', `Set channel members success. There are ${response.totalCount} channel members now.`);
};
if (callback)
return this.sendRequest(
request,
(status, response: AppContext.SetMembersResponse<MemberCustom, UUIDCustom> | null) => {
logResponse(response);
callback(status, response);
},
);
return this.sendRequest(request).then((response: AppContext.SetMembersResponse<MemberCustom, UUIDCustom>) => {
logResponse(response);
return response;
});
}
// endregion
// region Remove Members
/**
* Remove Members from the Channel.
*
* @param parameters - Request configuration parameters.
* @param callback - Request completion handler callback.
*/
public removeChannelMembers<
MemberCustom extends AppContext.CustomData = AppContext.CustomData,
UUIDCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.RemoveMembersParameters,
callback: ResultCallback<AppContext.RemoveMembersResponse<MemberCustom, UUIDCustom>>,
): void;
/**
* Remove Members from the Channel.
*
* @param parameters - Request configuration parameters.
*
* @returns Asynchronous Channel Members remove response.
*/
public async removeChannelMembers<
MemberCustom extends AppContext.CustomData = AppContext.CustomData,
UUIDCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.RemoveMembersParameters,
): Promise<AppContext.RemoveMembersResponse<MemberCustom, UUIDCustom>>;
/**
* Remove Members from the Channel.
*
* @param parameters - Request configuration parameters.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous Channel Members remove response or `void` in case if `callback` provided.
*/
async removeChannelMembers<
MemberCustom extends AppContext.CustomData = AppContext.CustomData,
UUIDCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.RemoveMembersParameters,
callback?: ResultCallback<AppContext.RemoveMembersResponse<MemberCustom, UUIDCustom>>,
): Promise<AppContext.RemoveMembersResponse<MemberCustom, UUIDCustom> | void> {
this.logger.debug('PubNub', () => ({
messageType: 'object',
message: { ...parameters },
details: `Remove channel members with parameters:`,
}));
const request = new SetChannelMembersRequest({ ...parameters, type: 'delete', keySet: this.keySet });
const logResponse = (response: AppContext.RemoveMembersResponse<MemberCustom, UUIDCustom> | null) => {
if (!response) return;
this.logger.debug(
'PubNub',
`Remove channel members success. There are ${response.totalCount} channel members now.`,
);
};
if (callback)
return this.sendRequest(
request,
(status, response: AppContext.RemoveMembersResponse<MemberCustom, UUIDCustom> | null) => {
logResponse(response);
callback(status, response);
},
);
return this.sendRequest(request).then((response: AppContext.RemoveMembersResponse<MemberCustom, UUIDCustom>) => {
logResponse(response);
return response;
});
}
// endregion
// endregion
// region Membership API
// region Get Membership
/**
* Fetch a specific UUID Memberships list for currently configured PubNub client `uuid`.
*
* @param callback - Request completion handler callback.
*
* @returns Asynchronous get UUID Memberships list response or `void` in case if `callback`
* provided.
*/
public getMemberships<
MembershipCustom extends AppContext.CustomData = AppContext.CustomData,
ChannelCustom extends AppContext.CustomData = AppContext.CustomData,
>(callback: ResultCallback<AppContext.GetMembershipsResponse<MembershipCustom, ChannelCustom>>): void;
/**
* Fetch a specific UUID Memberships list.
*
* @param parameters - Request configuration parameters.
* @param callback - Request completion handler callback.
*/
public getMemberships<
MembershipCustom extends AppContext.CustomData = AppContext.CustomData,
ChannelCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.GetMembershipsParameters,
callback: ResultCallback<AppContext.GetMembershipsResponse<MembershipCustom, ChannelCustom>>,
): void;
/**
* Fetch a specific UUID Memberships list.
*
* @param [parameters] - Request configuration parameters. Will fetch UUID Memberships list for
* currently configured PubNub client `uuid` if not set.
*
* @returns Asynchronous get UUID Memberships list response.
*/
public async getMemberships<
MembershipCustom extends AppContext.CustomData = AppContext.CustomData,
ChannelCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters?: AppContext.GetMembershipsParameters,
): Promise<AppContext.GetMembershipsResponse<MembershipCustom, ChannelCustom>>;
/**
* Fetch a specific UUID Memberships list.
*
* @param [parametersOrCallback] - Request configuration parameters or callback from overload.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous get UUID Memberships response or `void` in case if `callback` provided.
*/
async getMemberships<
MembershipCustom extends AppContext.CustomData = AppContext.CustomData,
ChannelCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parametersOrCallback?:
| AppContext.GetMembershipsParameters
| ResultCallback<AppContext.GetMembershipsResponse<MembershipCustom, ChannelCustom>>,
callback?: ResultCallback<AppContext.GetMembershipsResponse<MembershipCustom, ChannelCustom>>,
): Promise<AppContext.GetMembershipsResponse<MembershipCustom, ChannelCustom> | void> {
// Get user request parameters.
const parameters: AppContext.GetMembershipsParameters =
parametersOrCallback && typeof parametersOrCallback !== 'function' ? parametersOrCallback : {};
callback ??= typeof parametersOrCallback === 'function' ? parametersOrCallback : undefined;
if (parameters.userId) {
this.logger.warn('PubNub', `'userId' parameter is deprecated. Use 'uuid' instead.`);
parameters.uuid = parameters.userId;
}
parameters.uuid ??= this.configuration.userId;
this.logger.debug('PubNub', () => ({
messageType: 'object',
message: { ...parameters },
details: `Get memberships with parameters:`,
}));
const request = new GetUUIDMembershipsRequest({ ...parameters, keySet: this.keySet });
const logResponse = (response: AppContext.GetMembershipsResponse<MembershipCustom, ChannelCustom> | null) => {
if (!response) return;
this.logger.debug('PubNub', `Get memberships success. Received ${response.totalCount} memberships.`);
};
if (callback)
return this.sendRequest(
request,
(status, response: AppContext.GetMembershipsResponse<MembershipCustom, ChannelCustom> | null) => {
logResponse(response);
callback(status, response);
},
);
return this.sendRequest(request).then(
(response: AppContext.GetMembershipsResponse<MembershipCustom, ChannelCustom>) => {
logResponse(response);
return response;
},
);
}
// endregion
// region Set Membership
/**
* Update a specific UUID Memberships list.
*
* @param parameters - Request configuration parameters.
* @param callback - Request completion handler callback.
*/
public setMemberships<
MembershipCustom extends AppContext.CustomData = AppContext.CustomData,
ChannelCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.SetMembershipsParameters<MembershipCustom>,
callback: ResultCallback<AppContext.SetMembershipsResponse<MembershipCustom, ChannelCustom>>,
): void;
/**
* Update specific UUID Memberships list.
*
* @param parameters - Request configuration parameters or callback from overload.
*
* @returns Asynchronous update UUID Memberships list response.
*/
public async setMemberships<
MembershipCustom extends AppContext.CustomData = AppContext.CustomData,
ChannelCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.SetMembershipsParameters<MembershipCustom>,
): Promise<AppContext.SetMembershipsResponse<MembershipCustom, ChannelCustom>>;
/**
* Update specific UUID Memberships list.
*
* @param parameters - Request configuration parameters.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous update UUID Memberships list response or `void` in case if `callback`
* provided.
*/
async setMemberships<
MembershipCustom extends AppContext.CustomData = AppContext.CustomData,
ChannelCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.SetMembershipsParameters<MembershipCustom>,
callback?: ResultCallback<AppContext.SetMembershipsResponse<MembershipCustom, ChannelCustom>>,
): Promise<AppContext.SetMembershipsResponse<MembershipCustom, ChannelCustom> | void> {
if (parameters.userId) {
this.logger.warn('PubNub', `'userId' parameter is deprecated. Use 'uuid' instead.`);
parameters.uuid = parameters.userId;
}
parameters.uuid ??= this.configuration.userId;
this.logger.debug('PubNub', () => ({
messageType: 'object',
message: { ...parameters },
details: `Set memberships with parameters:`,
}));
const request = new SetUUIDMembershipsRequest({ ...parameters, type: 'set', keySet: this.keySet });
const logResponse = (response: AppContext.SetMembershipsResponse<MembershipCustom, ChannelCustom> | null) => {
if (!response) return;
this.logger.debug('PubNub', `Set memberships success. There are ${response.totalCount} memberships now.`);
};
if (callback)
return this.sendRequest(
request,
(status, response: AppContext.SetMembershipsResponse<MembershipCustom, ChannelCustom> | null) => {
logResponse(response);
callback(status, response);
},
);
return this.sendRequest(request).then(
(response: AppContext.SetMembershipsResponse<MembershipCustom, ChannelCustom>) => {
logResponse(response);
return response;
},
);
}
// endregion
// region Remove Membership
/**
* Remove a specific UUID Memberships.
*
* @param parameters - Request configuration parameters.
* @param callback - Request completion handler callback.
*/
public removeMemberships<
MembershipCustom extends AppContext.CustomData = AppContext.CustomData,
ChannelCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.RemoveMembershipsParameters,
callback: ResultCallback<AppContext.RemoveMembershipsResponse<MembershipCustom, ChannelCustom>>,
): void;
/**
* Remove a specific UUID Memberships.
*
* @param parameters - Request configuration parameters.
*
* @returns Asynchronous UUID Memberships remove response.
*/
public async removeMemberships<
MembershipCustom extends AppContext.CustomData = AppContext.CustomData,
ChannelCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.RemoveMembershipsParameters,
): Promise<AppContext.RemoveMembershipsResponse<MembershipCustom, ChannelCustom>>;
/**
* Remove a specific UUID Memberships.
*
* @param parameters - Request configuration parameters or callback from overload.
* @param [callback] - Request completion handler callback.
*
* @returns Asynchronous UUID Memberships remove response or `void` in case if `callback`
* provided.
*/
async removeMemberships<
MembershipCustom extends AppContext.CustomData = AppContext.CustomData,
ChannelCustom extends AppContext.CustomData = AppContext.CustomData,
>(
parameters: AppContext.RemoveMembershipsParameters,
callback?: ResultCallback<AppContext.RemoveMembershipsResponse<MembershipCustom, ChannelCustom>>,
): Promise<AppContext.RemoveMembershipsResponse<MembershipCustom, ChannelCustom> | void> {
if (parameters.userId) {
this.logger.warn('PubNub', `'userId' parameter is deprecated. Use 'uuid' instead.`);
parameters.uuid = parameters.userId;
}
parameters.uuid ??= this.configuration.userId;
this.logger.debug('PubNub', () => ({
messageType: 'object',
message: { ...parameters },
details: `Remove memberships with parameters:`,
}));
const request = new SetUUIDMembershipsRequest({ ...parameters, type: 'delete', keyS