{"action":"created","comment":{"url":"https://api.github.com/repos/ably/ably-js/pulls/comments/92131594","pull_request_review_id":12639712,"id":92131594,"diff_hunk":"@@ -0,0 +1,400 @@\n+//declare module Ably {\n+\n+namespace ChannelState {\n+  export type INITIALIZED = 'initialized';\n+  export type ATTACHING = 'attaching';\n+  export type ATTACHED = \"attached\";\n+  export type DETACHING = \"detaching\";\n+  export type DETACHED = \"detached\";\n+  export type SUSPENDED = \"suspended\";\n+  export type FAILED = \"failed\";\n+}\n+type ChannelState = ChannelState.FAILED | ChannelState.INITIALIZED | ChannelState.SUSPENDED | ChannelState.ATTACHED | ChannelState.ATTACHING | ChannelState.DETACHED | ChannelState.DETACHING;\n+\n+namespace ConnectionState {\n+  export type INITIALIZED = \"initialized\";\n+  export type CONNECTING = \"connecting\";\n+  export type CONNECTED = \"connected\";\n+  export type DISCONNECTED = \"disconnected\";\n+  export type SUSPENDED = \"suspended\";\n+  export type CLOSING = \"closing\";\n+  export type CLOSED = \"closed\";\n+  export type FAILED = \"failed\";\n+}\n+type ConnectionState = ConnectionState.INITIALIZED | ConnectionState.CONNECTED | ConnectionState.CONNECTING | ConnectionState.DISCONNECTED | ConnectionState.SUSPENDED | ConnectionState.CLOSED | ConnectionState.CLOSING | ConnectionState.FAILED;\n+\n+namespace ConnectionEvent {\n+  export type INITIALIZED = \"initialized\";\n+  export type CONNECTING = \"connecting\";\n+  export type CONNECTED = \"connected\";\n+  export type DISCONNECTED = \"disconnected\";\n+  export type SUSPENDED = \"suspended\";\n+  export type CLOSING = \"closing\";\n+  export type CLOSED = \"closed\";\n+  export type FAILED = \"failed\";\n+  export type UPDATE = \"update\";\n+}\n+type ConnectionEvent = ConnectionEvent.INITIALIZED | ConnectionEvent.CONNECTED | ConnectionEvent.CONNECTING | ConnectionEvent.DISCONNECTED | ConnectionEvent.SUSPENDED | ConnectionEvent.CLOSED | ConnectionEvent.CLOSING | ConnectionEvent.FAILED | ConnectionEvent.UPDATE;\n+\n+namespace PresenceAction {\n+  export type ABSENT = \"absent\";\n+  export type PRESENT = \"present\";\n+  export type ENTER = \"enter\";\n+  export type LEAVE = \"leave\";\n+  export type UPDATE = \"update\";\n+}\n+type PresenceAction = PresenceAction.ABSENT | PresenceAction.PRESENT | PresenceAction.ENTER | PresenceAction.LEAVE | PresenceAction.UPDATE;\n+\n+namespace StatsIntervalGranularity {\n+  export type MINUTE = \"minute\";\n+  export type HOUR = \"hour\";\n+  export type DAY = \"day\";\n+  export type MONTH = \"month\";\n+}\n+type StatsIntervalGranularity = StatsIntervalGranularity.MINUTE | StatsIntervalGranularity.HOUR | StatsIntervalGranularity.DAY | StatsIntervalGranularity.MONTH;\n+\n+// Interfaces\n+\n+interface ClientOptions extends AuthOptions {\n+  autoConnect?: boolean;\n+  clientId?: String;\n+  defaultTokenParams?: TokenParams;\n+  echoMessages?: boolean;\n+  environment?: String;\n+  log?: LogInfo;\n+  port?: number;\n+  queueMessages?: boolean;\n+  restHost?: String;\n+  realtimeHost?: String;\n+  fallbackHosts?: Array<String>;\n+  recover?: String | standardCallback;\n+  tls?: boolean;\n+  tlsPort?: number;\n+  useBinaryProtocol?: boolean;\n+}\n+\n+interface AuthOptions {\n+  authCallback?: (data: TokenParams,callback: (Error: ErrorInfo | String, tokenRequestOrDetails: String | TokenDetails | TokenRequest) => void) => void;\n+  authHeaders?: Array<any>;\n+  authMethod?: String;\n+  authParams?: Array<any>;\n+  authUrl?: String;\n+  key?: String;\n+  queryTime?: boolean;\n+  token?: String | TokenDetails;\n+  tokenDetails?: TokenDetails;\n+  useTokenAuth?: boolean;\n+}\n+\n+interface TokenParams {\n+  capability?: String;\n+  clientId?: String;\n+  nonce?: String;\n+  timestamp?: Number;   // Time?\n+  ttl?: Number;\n+}\n+\n+interface CipherParams {\n+  algorithm: String;\n+  key: any;\n+  keyLength: number;\n+  mode: String;\n+}\n+\n+interface ErrorInfo {\n+  code: number;\n+  message: String;\n+  statusCode: number;\n+}\n+\n+interface StatsMessageTypes {\n+  all: number,\n+  messages: number,\n+  presence: number;\n+}\n+\n+interface StatsRequestCount {\n+  failed: number,\n+  refused: number,\n+  succeeded: number\n+}\n+\n+interface StatsResourceCount {\n+  mean: number,\n+  min: number,\n+  opened: number,\n+  peak: number,\n+  refused: number\n+}\n+\n+interface StatsConnectionTypes {\n+  all: number,\n+  plain: number,\n+  tls: number\n+}\n+\n+interface StatsMessageTraffic {\n+  all: number,\n+  realtime: number,\n+  rest: number,\n+  webhook: number\n+}\n+\n+interface TokenDetails {\n+  capability: String;\n+  clientId: String;\n+  expires: number; // Time\n+  issued: number; // Time\n+  token: String;\n+}\n+\n+interface TokenRequest {\n+  capability: String;\n+  clientId?: String;\n+  keyName: String;\n+  mac: String;\n+  nonce: String;\n+  timestamp: number; // Time\n+  ttl?: number;\n+}\n+\n+interface ChannelOptions {\n+  cipher: any;\n+}\n+\n+interface RestPresenceHistoryParams {\n+  start?: number;\n+  end?: number;\n+  direction?: String;\n+  limit?: number;\n+}\n+\n+\n+interface RestPresenceParams {\n+  limit?: number;\n+  clientId?: String;\n+  connectionId?: String;\n+}\n+\n+interface RealtimePresenceParams {\n+  waitForSync?: boolean;\n+  clientId?: String;\n+  connectionId?: String;\n+}\n+\n+interface RealtimePresenceHistoryParams {\n+  start?: number;\n+  end?: number;\n+  direction?: String;\n+  limit?: number;\n+  untilAttach?: boolean\n+}\n+\n+interface LogInfo {\n+  level?: number;\n+  handler?: (...args) => void;\n+}\n+\n+\n+// Common Listeners\n+type ListenerFn = (...args: Array<any>) => void;\n+type PaginatedResultCallback = (Error: ErrorInfo, results: PaginatedResult ) => void;\n+type standardCallback = (Error: ErrorInfo, results: any) => void;\n+type messageCallback = (Msg: any) => void;\n+type errorCallback = (Error: ErrorInfo) => void;\n+\n+\n+\n+// Internal Classes\n+declare class EventEmitter {\n+  on: (eventOrCallback: String | ListenerFn, callback?: ListenerFn) => void;\n+\n+  once: (eventOrCallback: String | ListenerFn, callback?: ListenerFn) => void;\n+\n+  off: (eventOrCallback?: String | ListenerFn, callback?: ListenerFn) => void;\n+}\n+\n+// Classes\n+export declare class Auth {\n+  clientId: String;\n+  authorize: (tokenParams?: TokenParams, authOptions?: AuthOptions, callback?: (Error: ErrorInfo, Results: TokenDetails) => void) => void;\n+  createTokenRequest: (tokenParams?: TokenParams, authOptions?: AuthOptions, callback?: (Error: ErrorInfo, Results: TokenRequest) => void) => void;\n+  requestToken: (TokenParams?: TokenParams, authOptions?: AuthOptions, callback?: (Error: ErrorInfo, Results: TokenDetails) => void) => void;\n+}\n+\n+export declare class Presence {\n+  get: (params: RestPresenceParams, PaginatedResultCallback) => void;\n+\n+  history: (params: RestPresenceHistoryParams, PaginatedResultCallback) => void;\n+}\n+\n+export declare class RealtimePresence {\n+  syncComplete: () =>  boolean;\n+\n+  get: (Params: RealtimePresenceParams, callback?: PaginatedResultCallback) => void;\n+\n+  history: (ParamsOrCallback: RealtimePresenceHistoryParams | PaginatedResultCallback, callback?: PaginatedResultCallback) => void;\n+\n+  subscribe: (presenceOrCallback: PresenceAction | messageCallback, listener?: standardCallback, callback?: standardCallback) => void;\n+\n+  unsubscribe: (presence?: PresenceAction, listener?: standardCallback, callback?: standardCallback) => void;\n+\n+  enter: (Data: any, callback?: standardCallback) => void;\n+\n+  update: (Data: any, callback?: standardCallback) => void;\n+\n+  leave: (Data: any, callback?: standardCallback) => void;\n+\n+  enterClient: (clientId: String, Data: any, callback?: standardCallback) => void;\n+\n+  updateClient: (clientId: String, Data: any, callback?: standardCallback) => void;\n+\n+  leaveClient: (clientId: String, Data: any, callback?: standardCallback) => void;\n+}\n+\n+export declare class Channel {\n+  name: String;\n+  presence: Presence;\n+  history: (ParamsOrCallback?: RestPresenceHistoryParams | PaginatedResultCallback, callback?: PaginatedResultCallback ) => void;\n+  publish: (messages: any, MessageDataOrCallback?: any | errorCallback, callback?: errorCallback) => void;\n+}\n+\n+export declare class RealtimeChannel extends EventEmitter {\n+  name: String;\n+  errorReason: ErrorInfo;\n+  state: ChannelState;\n+  presence: RealtimePresence;\n+\n+  attach: (callback?: standardCallback) => void;\n+\n+  detach:(callback?: standardCallback) => void;\n+\n+  history: (ParamsOrCallback?: RealtimePresenceHistoryParams | PaginatedResultCallback, callback?: PaginatedResultCallback) => void;\n+\n+  subscribe: (eventOrCallback: String | messageCallback, listener?: messageCallback) => void;\n+\n+  unsubscribe: (eventOrCallback?: String | messageCallback, listener?: messageCallback) => void;\n+\n+  publish: (messages: any, MessageDataOrCallback?: any | errorCallback, callback?: errorCallback) => void;\n+\n+}\n+\n+export declare class Channels {\n+  get: (name: String, channelOptions?: ChannelOptions) => RealtimeChannel;\n+\n+  release: (name: String) => void;\n+}\n+\n+export declare class Message {\n+  constructor();\n+\n+  fromEncoded: (JsonObject: String, channelOptions: ChannelOptions) => Message;\n+\n+  fromEncodedArray: (JsonArray: String, channelOptions: ChannelOptions) => Array<Message>;\n+\n+  clientId: String;\n+  connectionId: String;\n+  data: any;\n+  encoding: String;\n+  extras: String;\n+  id: String;\n+  name: String;\n+  timestamp: number; // Time\n+}\n+\n+export declare class PresenceMessage {\n+  fromEncoded: (JsonObject: any, channelOptions?: ChannelOptions) => PresenceMessage;\n+\n+  fromEncodedArray: (JsonArray: Array<any>, channelOptions?: ChannelOptions) => Array<PresenceMessage>;\n+\n+  action: PresenceAction;\n+  clientId: String;\n+  connectionId: String;\n+  data: any;\n+  encoding: String;\n+  id: String;\n+  timestamp: number; // Time\n+}\n+\n+export declare class Rest {\n+  constructor(options: String | ClientOptions);\n+  auth: Auth;\n+  channels: Channels;\n+  request: (method: string, path: string, parmas?: any, body?: Array<any> | any, headers?: any, callback?: (Error: ErrorInfo, results: HttpPaginatedResponse) => void) => void;\n+  stats: (ParamsOrCallback?: any, callback?: PaginatedResultCallback) => void;\n+  time: (paramsOrCallback?: any, callback?: (Error: ErrorInfo, time: number ) => void) => void; // time\n+}\n+\n+export declare class Realtime {\n+  constructor(options: String | ClientOptions);\n+\n+  auth: Auth;\n+  channels: Channels;\n+  clientId: String;\n+  connection: Connection;\n+\n+  request: (method: string, path: string, parmas?: any, body?: Array<any> | any, headers?: any, callback?: (Error: ErrorInfo, results: HttpPaginatedResponse) => void) => void;\n+\n+  stats: (ParamsOrCallback?: any, callback?: PaginatedResultCallback) => void;","path":"ably.ts.d","position":338,"original_position":338,"commit_id":"25e6c23839d88d09dfc7b6f8da72ce589827cf04","original_commit_id":"25e6c23839d88d09dfc7b6f8da72ce589827cf04","user":{"login":"NathanaelA","id":850871,"avatar_url":"https://avatars.githubusercontent.com/u/850871?v=3","gravatar_id":"","url":"https://api.github.com/users/NathanaelA","html_url":"https://github.com/NathanaelA","followers_url":"https://api.github.com/users/NathanaelA/followers","following_url":"https://api.github.com/users/NathanaelA/following{/other_user}","gists_url":"https://api.github.com/users/NathanaelA/gists{/gist_id}","starred_url":"https://api.github.com/users/NathanaelA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NathanaelA/subscriptions","organizations_url":"https://api.github.com/users/NathanaelA/orgs","repos_url":"https://api.github.com/users/NathanaelA/repos","events_url":"https://api.github.com/users/NathanaelA/events{/privacy}","received_events_url":"https://api.github.com/users/NathanaelA/received_events","type":"User","site_admin":false},"body":"Fixed","created_at":"2016-12-13T09:53:13Z","updated_at":"2016-12-13T09:53:13Z","html_url":"https://github.com/ably/ably-js/pull/359#discussion_r92131594","pull_request_url":"https://api.github.com/repos/ably/ably-js/pulls/359","_links":{"self":{"href":"https://api.github.com/repos/ably/ably-js/pulls/comments/92131594"},"html":{"href":"https://github.com/ably/ably-js/pull/359#discussion_r92131594"},"pull_request":{"href":"https://api.github.com/repos/ably/ably-js/pulls/359"}}},"pull_request":{"url":"https://api.github.com/repos/ably/ably-js/pulls/359","id":97600057,"html_url":"https://github.com/ably/ably-js/pull/359","diff_url":"https://github.com/ably/ably-js/pull/359.diff","patch_url":"https://github.com/ably/ably-js/pull/359.patch","issue_url":"https://api.github.com/repos/ably/ably-js/issues/359","number":359,"state":"open","locked":false,"title":"Add TypeScript typings support","user":{"login":"NathanaelA","id":850871,"avatar_url":"https://avatars.githubusercontent.com/u/850871?v=3","gravatar_id":"","url":"https://api.github.com/users/NathanaelA","html_url":"https://github.com/NathanaelA","followers_url":"https://api.github.com/users/NathanaelA/followers","following_url":"https://api.github.com/users/NathanaelA/following{/other_user}","gists_url":"https://api.github.com/users/NathanaelA/gists{/gist_id}","starred_url":"https://api.github.com/users/NathanaelA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NathanaelA/subscriptions","organizations_url":"https://api.github.com/users/NathanaelA/orgs","repos_url":"https://api.github.com/users/NathanaelA/repos","events_url":"https://api.github.com/users/NathanaelA/events{/privacy}","received_events_url":"https://api.github.com/users/NathanaelA/received_events","type":"User","site_admin":false},"body":"Added Typings file; ably.ts.d, updated package.json to point to it and updated docs on how to use it.","created_at":"2016-12-12T17:46:09Z","updated_at":"2016-12-13T09:53:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"207c623383b0436e114881ca5605c366b6b41797","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/ably/ably-js/pulls/359/commits","review_comments_url":"https://api.github.com/repos/ably/ably-js/pulls/359/comments","review_comment_url":"https://api.github.com/repos/ably/ably-js/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ably/ably-js/issues/359/comments","statuses_url":"https://api.github.com/repos/ably/ably-js/statuses/25e6c23839d88d09dfc7b6f8da72ce589827cf04","head":{"label":"NathanaelA:0-9-typings","ref":"0-9-typings","sha":"25e6c23839d88d09dfc7b6f8da72ce589827cf04","user":{"login":"NathanaelA","id":850871,"avatar_url":"https://avatars.githubusercontent.com/u/850871?v=3","gravatar_id":"","url":"https://api.github.com/users/NathanaelA","html_url":"https://github.com/NathanaelA","followers_url":"https://api.github.com/users/NathanaelA/followers","following_url":"https://api.github.com/users/NathanaelA/following{/other_user}","gists_url":"https://api.github.com/users/NathanaelA/gists{/gist_id}","starred_url":"https://api.github.com/users/NathanaelA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NathanaelA/subscriptions","organizations_url":"https://api.github.com/users/NathanaelA/orgs","repos_url":"https://api.github.com/users/NathanaelA/repos","events_url":"https://api.github.com/users/NathanaelA/events{/privacy}","received_events_url":"https://api.github.com/users/NathanaelA/received_events","type":"User","site_admin":false},"repo":{"id":72975523,"name":"ably-js","full_name":"NathanaelA/ably-js","owner":{"login":"NathanaelA","id":850871,"avatar_url":"https://avatars.githubusercontent.com/u/850871?v=3","gravatar_id":"","url":"https://api.github.com/users/NathanaelA","html_url":"https://github.com/NathanaelA","followers_url":"https://api.github.com/users/NathanaelA/followers","following_url":"https://api.github.com/users/NathanaelA/following{/other_user}","gists_url":"https://api.github.com/users/NathanaelA/gists{/gist_id}","starred_url":"https://api.github.com/users/NathanaelA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NathanaelA/subscriptions","organizations_url":"https://api.github.com/users/NathanaelA/orgs","repos_url":"https://api.github.com/users/NathanaelA/repos","events_url":"https://api.github.com/users/NathanaelA/events{/privacy}","received_events_url":"https://api.github.com/users/NathanaelA/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/NathanaelA/ably-js","description":"Ably Realtime Messaging Javascript library to connect from your browser or Node.js","fork":true,"url":"https://api.github.com/repos/NathanaelA/ably-js","forks_url":"https://api.github.com/repos/NathanaelA/ably-js/forks","keys_url":"https://api.github.com/repos/NathanaelA/ably-js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/NathanaelA/ably-js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/NathanaelA/ably-js/teams","hooks_url":"https://api.github.com/repos/NathanaelA/ably-js/hooks","issue_events_url":"https://api.github.com/repos/NathanaelA/ably-js/issues/events{/number}","events_url":"https://api.github.com/repos/NathanaelA/ably-js/events","assignees_url":"https://api.github.com/repos/NathanaelA/ably-js/assignees{/user}","branches_url":"https://api.github.com/repos/NathanaelA/ably-js/branches{/branch}","tags_url":"https://api.github.com/repos/NathanaelA/ably-js/tags","blobs_url":"https://api.github.com/repos/NathanaelA/ably-js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/NathanaelA/ably-js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/NathanaelA/ably-js/git/refs{/sha}","trees_url":"https://api.github.com/repos/NathanaelA/ably-js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/NathanaelA/ably-js/statuses/{sha}","languages_url":"https://api.github.com/repos/NathanaelA/ably-js/languages","stargazers_url":"https://api.github.com/repos/NathanaelA/ably-js/stargazers","contributors_url":"https://api.github.com/repos/NathanaelA/ably-js/contributors","subscribers_url":"https://api.github.com/repos/NathanaelA/ably-js/subscribers","subscription_url":"https://api.github.com/repos/NathanaelA/ably-js/subscription","commits_url":"https://api.github.com/repos/NathanaelA/ably-js/commits{/sha}","git_commits_url":"https://api.github.com/repos/NathanaelA/ably-js/git/commits{/sha}","comments_url":"https://api.github.com/repos/NathanaelA/ably-js/comments{/number}","issue_comment_url":"https://api.github.com/repos/NathanaelA/ably-js/issues/comments{/number}","contents_url":"https://api.github.com/repos/NathanaelA/ably-js/contents/{+path}","compare_url":"https://api.github.com/repos/NathanaelA/ably-js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/NathanaelA/ably-js/merges","archive_url":"https://api.github.com/repos/NathanaelA/ably-js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/NathanaelA/ably-js/downloads","issues_url":"https://api.github.com/repos/NathanaelA/ably-js/issues{/number}","pulls_url":"https://api.github.com/repos/NathanaelA/ably-js/pulls{/number}","milestones_url":"https://api.github.com/repos/NathanaelA/ably-js/milestones{/number}","notifications_url":"https://api.github.com/repos/NathanaelA/ably-js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/NathanaelA/ably-js/labels{/name}","releases_url":"https://api.github.com/repos/NathanaelA/ably-js/releases{/id}","deployments_url":"https://api.github.com/repos/NathanaelA/ably-js/deployments","created_at":"2016-11-06T07:07:29Z","updated_at":"2016-11-06T07:07:31Z","pushed_at":"2016-12-12T23:26:55Z","git_url":"git://github.com/NathanaelA/ably-js.git","ssh_url":"git@github.com:NathanaelA/ably-js.git","clone_url":"https://github.com/NathanaelA/ably-js.git","svn_url":"https://github.com/NathanaelA/ably-js","homepage":null,"size":14495,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ably:0-9-spec","ref":"0-9-spec","sha":"ebb290c603bec199174b69efac8254832e17923f","user":{"login":"ably","id":1859245,"avatar_url":"https://avatars.githubusercontent.com/u/1859245?v=3","gravatar_id":"","url":"https://api.github.com/users/ably","html_url":"https://github.com/ably","followers_url":"https://api.github.com/users/ably/followers","following_url":"https://api.github.com/users/ably/following{/other_user}","gists_url":"https://api.github.com/users/ably/gists{/gist_id}","starred_url":"https://api.github.com/users/ably/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ably/subscriptions","organizations_url":"https://api.github.com/users/ably/orgs","repos_url":"https://api.github.com/users/ably/repos","events_url":"https://api.github.com/users/ably/events{/privacy}","received_events_url":"https://api.github.com/users/ably/received_events","type":"Organization","site_admin":false},"repo":{"id":6676523,"name":"ably-js","full_name":"ably/ably-js","owner":{"login":"ably","id":1859245,"avatar_url":"https://avatars.githubusercontent.com/u/1859245?v=3","gravatar_id":"","url":"https://api.github.com/users/ably","html_url":"https://github.com/ably","followers_url":"https://api.github.com/users/ably/followers","following_url":"https://api.github.com/users/ably/following{/other_user}","gists_url":"https://api.github.com/users/ably/gists{/gist_id}","starred_url":"https://api.github.com/users/ably/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ably/subscriptions","organizations_url":"https://api.github.com/users/ably/orgs","repos_url":"https://api.github.com/users/ably/repos","events_url":"https://api.github.com/users/ably/events{/privacy}","received_events_url":"https://api.github.com/users/ably/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ably/ably-js","description":"Ably Realtime Messaging Javascript library to connect from your browser or Node.js","fork":false,"url":"https://api.github.com/repos/ably/ably-js","forks_url":"https://api.github.com/repos/ably/ably-js/forks","keys_url":"https://api.github.com/repos/ably/ably-js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ably/ably-js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ably/ably-js/teams","hooks_url":"https://api.github.com/repos/ably/ably-js/hooks","issue_events_url":"https://api.github.com/repos/ably/ably-js/issues/events{/number}","events_url":"https://api.github.com/repos/ably/ably-js/events","assignees_url":"https://api.github.com/repos/ably/ably-js/assignees{/user}","branches_url":"https://api.github.com/repos/ably/ably-js/branches{/branch}","tags_url":"https://api.github.com/repos/ably/ably-js/tags","blobs_url":"https://api.github.com/repos/ably/ably-js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ably/ably-js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ably/ably-js/git/refs{/sha}","trees_url":"https://api.github.com/repos/ably/ably-js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ably/ably-js/statuses/{sha}","languages_url":"https://api.github.com/repos/ably/ably-js/languages","stargazers_url":"https://api.github.com/repos/ably/ably-js/stargazers","contributors_url":"https://api.github.com/repos/ably/ably-js/contributors","subscribers_url":"https://api.github.com/repos/ably/ably-js/subscribers","subscription_url":"https://api.github.com/repos/ably/ably-js/subscription","commits_url":"https://api.github.com/repos/ably/ably-js/commits{/sha}","git_commits_url":"https://api.github.com/repos/ably/ably-js/git/commits{/sha}","comments_url":"https://api.github.com/repos/ably/ably-js/comments{/number}","issue_comment_url":"https://api.github.com/repos/ably/ably-js/issues/comments{/number}","contents_url":"https://api.github.com/repos/ably/ably-js/contents/{+path}","compare_url":"https://api.github.com/repos/ably/ably-js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ably/ably-js/merges","archive_url":"https://api.github.com/repos/ably/ably-js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ably/ably-js/downloads","issues_url":"https://api.github.com/repos/ably/ably-js/issues{/number}","pulls_url":"https://api.github.com/repos/ably/ably-js/pulls{/number}","milestones_url":"https://api.github.com/repos/ably/ably-js/milestones{/number}","notifications_url":"https://api.github.com/repos/ably/ably-js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ably/ably-js/labels{/name}","releases_url":"https://api.github.com/repos/ably/ably-js/releases{/id}","deployments_url":"https://api.github.com/repos/ably/ably-js/deployments","created_at":"2012-11-13T19:41:13Z","updated_at":"2016-12-05T19:21:38Z","pushed_at":"2016-12-12T23:26:56Z","git_url":"git://github.com/ably/ably-js.git","ssh_url":"git@github.com:ably/ably-js.git","clone_url":"https://github.com/ably/ably-js.git","svn_url":"https://github.com/ably/ably-js","homepage":"https://www.ably.io/","size":14751,"stargazers_count":16,"watchers_count":16,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"open_issues_count":38,"forks":7,"open_issues":38,"watchers":16,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ably/ably-js/pulls/359"},"html":{"href":"https://github.com/ably/ably-js/pull/359"},"issue":{"href":"https://api.github.com/repos/ably/ably-js/issues/359"},"comments":{"href":"https://api.github.com/repos/ably/ably-js/issues/359/comments"},"review_comments":{"href":"https://api.github.com/repos/ably/ably-js/pulls/359/comments"},"review_comment":{"href":"https://api.github.com/repos/ably/ably-js/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ably/ably-js/pulls/359/commits"},"statuses":{"href":"https://api.github.com/repos/ably/ably-js/statuses/25e6c23839d88d09dfc7b6f8da72ce589827cf04"}}}}
{"actor":{"display_login":"NathanaelA"}}