diff --git a/ably/ably-tests.ts b/ably/ably-tests.ts index aa08ca226e..da4714d21a 100644 --- a/ably/ably-tests.ts +++ b/ably/ably-tests.ts @@ -237,3 +237,17 @@ client.stats({ limit: 50 }, function(err, statsPage) { // statsPage as Pa // Fetching the Ably service time client.time({}, function(err, time) {}); // time is in ms since epoch + +// Getting decoded Message objects from JSON +var messages = Ably.Realtime.Message.fromEncodedArray([{ id: 'foo' }]); +console.log(messages[0].id); + +var message = Ably.Rest.Message.fromEncoded({ id: 'foo' }); +console.log(message.id); + +// Getting decoded PresenceMessage objects from JSON +var presenceMessages = Ably.Realtime.PresenceMessage.fromEncodedArray([{ id: 'foo' }]); +console.log(presenceMessages[0].action); + +var presenceMessage = Ably.Rest.PresenceMessage.fromEncoded({ id: 'foo' }); +console.log(presenceMessage.action); diff --git a/ably/index.d.ts b/ably/index.d.ts index b8cad7ae69..bf69daafc3 100644 --- a/ably/index.d.ts +++ b/ably/index.d.ts @@ -295,6 +295,8 @@ declare namespace ablyLib { type realtimePresenceGetCallback = (error: ErrorInfo, messages: PresenceMessage[]) => void; type tokenDetailsCallback = (error: ErrorInfo, Results: TokenDetails) => void; type tokenRequestCallback = (error: ErrorInfo, Results: TokenRequest) => void; + type fromEncoded = (JsonObject: any, channelOptions?: ChannelOptions) => T; + type fromEncodedArray = (JsonArray: any[], channelOptions?: ChannelOptions) => T[]; // Internal Classes class EventEmitter { @@ -358,8 +360,8 @@ declare namespace ablyLib { class Message { constructor(); - fromEncoded: (JsonObject: string, channelOptions: ChannelOptions) => Message; - fromEncodedArray: (JsonArray: string, channelOptions: ChannelOptions) => Message[]; + static fromEncoded: fromEncoded; + static fromEncodedArray: fromEncodedArray; clientId: string; connectionId: string; data: any; @@ -370,9 +372,15 @@ declare namespace ablyLib { timestamp: number; } + interface MessageStatic { + fromEncoded: fromEncoded; + fromEncodedArray: fromEncodedArray; + } + class PresenceMessage { - fromEncoded: (JsonObject: any, channelOptions?: ChannelOptions) => PresenceMessage; - fromEncodedArray: (JsonArray: any[], channelOptions?: ChannelOptions) => PresenceMessage[]; + constructor(); + static fromEncoded: fromEncoded; + static fromEncodedArray: fromEncodedArray; action: PresenceAction; clientId: string; connectionId: string; @@ -382,6 +390,11 @@ declare namespace ablyLib { timestamp: number; } + interface PresenceMessageStatic { + fromEncoded: fromEncoded; + fromEncodedArray: fromEncodedArray; + } + interface Crypto { generateRandomKey: (callback: (error: ErrorInfo, key: string) => void) => void; } @@ -432,6 +445,8 @@ declare namespace ablyLib { export declare class Rest { constructor(options: ablyLib.ClientOptions | string); static Crypto: ablyLib.Crypto; + static Message: ablyLib.MessageStatic; + static PresenceMessage: ablyLib.PresenceMessageStatic; auth: ablyLib.Auth; channels: ablyLib.Channels; request: (method: string, path: string, params?: any, body?: any[] | any, headers?: any, callback?: (error: ablyLib.ErrorInfo, response: ablyLib.HttpPaginatedResponse) => void) => void; @@ -442,6 +457,8 @@ export declare class Rest { export declare class Realtime { constructor(options: ablyLib.ClientOptions | string); static Crypto: ablyLib.Crypto; + static Message: ablyLib.MessageStatic; + static PresenceMessage: ablyLib.PresenceMessageStatic; auth: ablyLib.Auth; channels: ablyLib.Channels; clientId: string;