From e07c171818f40923b569a54d125e7ce1ffaa0b91 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Mon, 11 Mar 2024 22:37:44 +0900
Subject: [PATCH 1/2] Infer streaming URL from instance information
---
megalodon/src/firefish.ts | 35 ++++++++++++++++--------
megalodon/src/firefish/api_client.ts | 9 +++++--
megalodon/src/friendica.ts | 38 ++++++++++++++++++---------
megalodon/src/friendica/api_client.ts | 7 +++--
megalodon/src/mastodon.ts | 38 ++++++++++++++++++---------
megalodon/src/mastodon/api_client.ts | 7 +++--
megalodon/src/megalodon.ts | 13 ++++-----
megalodon/src/pleroma.ts | 38 ++++++++++++++++++---------
megalodon/src/pleroma/api_client.ts | 7 +++--
9 files changed, 125 insertions(+), 67 deletions(-)
diff --git a/megalodon/src/firefish.ts b/megalodon/src/firefish.ts
index 7c0343c17..9d10cdffe 100644
--- a/megalodon/src/firefish.ts
+++ b/megalodon/src/firefish.ts
@@ -2350,27 +2350,40 @@ export default class Firefish implements MegalodonInterface {
})
}
- public userSocket(): WebSocketInterface {
- return this.client.socket('user')
+ public async streamingURL(): Promise {
+ const instance = await this.getInstance()
+ if (instance.data.urls) {
+ return instance.data.urls.streaming_api
+ }
+ return this.baseUrl
+ }
+
+ public async userStreaming(): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(url, 'user')
}
- public publicSocket(): WebSocketInterface {
- return this.client.socket('globalTimeline')
+ public async publicStreaming(): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(url, 'globalTimeline')
}
- public localSocket(): WebSocketInterface {
- return this.client.socket('localTimeline')
+ public async localStreaming(): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(url, 'localTimeline')
}
- public tagSocket(_tag: string): WebSocketInterface {
+ public async tagStreaming(_tag: string): Promise {
throw new NotImplementedError('TODO: implement')
}
- public listSocket(list_id: string): WebSocketInterface {
- return this.client.socket('list', list_id)
+ public async listStreaming(list_id: string): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(url, 'list', list_id)
}
- public directSocket(): WebSocketInterface {
- return this.client.socket('conversation')
+ public async directStreaming(): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(url, 'conversation')
}
}
diff --git a/megalodon/src/firefish/api_client.ts b/megalodon/src/firefish/api_client.ts
index 195a880e7..9e2164395 100644
--- a/megalodon/src/firefish/api_client.ts
+++ b/megalodon/src/firefish/api_client.ts
@@ -610,7 +610,11 @@ namespace FirefishAPI {
get(path: string, params?: any, headers?: { [key: string]: string }): Promise>
post(path: string, params?: any, headers?: { [key: string]: string }): Promise>
cancel(): void
- socket(channel: 'user' | 'localTimeline' | 'hybridTimeline' | 'globalTimeline' | 'conversation' | 'list', listId?: string): WebSocket
+ socket(
+ url: string,
+ channel: 'user' | 'localTimeline' | 'hybridTimeline' | 'globalTimeline' | 'conversation' | 'list',
+ listId?: string
+ ): WebSocket
}
/**
@@ -702,17 +706,18 @@ namespace FirefishAPI {
/**
* Get connection and receive websocket connection for Firefish API.
*
+ * @param url Streaming url.
* @param channel Channel name is user, localTimeline, hybridTimeline, globalTimeline, conversation or list.
* @param listId This parameter is required only list channel.
*/
public socket(
+ url: string,
channel: 'user' | 'localTimeline' | 'hybridTimeline' | 'globalTimeline' | 'conversation' | 'list',
listId?: string
): WebSocket {
if (!this.accessToken) {
throw new Error('accessToken is required')
}
- const url = this.baseUrl + '/streaming'
const streaming = new WebSocket(url, channel, this.accessToken, listId, this.userAgent)
streaming.start()
diff --git a/megalodon/src/friendica.ts b/megalodon/src/friendica.ts
index 389d41080..fd29e9432 100644
--- a/megalodon/src/friendica.ts
+++ b/megalodon/src/friendica.ts
@@ -2840,27 +2840,41 @@ export default class Friendica implements MegalodonInterface {
// ======================================
// WebSocket
// ======================================
- public userSocket(): WebSocket {
- return this.client.socket('/api/v1/streaming', 'user')
+ public async streamingURL(): Promise {
+ const instance = await this.getInstance()
+ if (instance.data.urls) {
+ return instance.data.urls.streaming_api
+ }
+ return this.baseUrl
+ }
+
+ public async userStreaming(): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'user')
}
- public publicSocket(): WebSocket {
- return this.client.socket('/api/v1/streaming', 'public')
+ public async publicStreaming(): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'public')
}
- public localSocket(): WebSocket {
- return this.client.socket('/api/v1/streaming', 'public:local')
+ public async localStreaming(): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'public:local')
}
- public tagSocket(tag: string): WebSocket {
- return this.client.socket('/api/v1/streaming', 'hashtag', `tag=${tag}`)
+ public async tagStreaming(tag: string): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'hashtag', `tag=${tag}`)
}
- public listSocket(list_id: string): WebSocket {
- return this.client.socket('/api/v1/streaming', 'list', `list=${list_id}`)
+ public async listStreaming(list_id: string): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'list', `list=${list_id}`)
}
- public directSocket(): WebSocket {
- return this.client.socket('/api/v1/streaming', 'direct')
+ public async directStreaming(): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'direct')
}
}
diff --git a/megalodon/src/friendica/api_client.ts b/megalodon/src/friendica/api_client.ts
index 48b743c78..1bee245f8 100644
--- a/megalodon/src/friendica/api_client.ts
+++ b/megalodon/src/friendica/api_client.ts
@@ -24,7 +24,7 @@ namespace FriendicaAPI {
postForm(path: string, params?: any, headers?: { [key: string]: string }): Promise>
del(path: string, params?: any, headers?: { [key: string]: string }): Promise>
cancel(): void
- socket(path: string, stream: string, params?: string): WebSocket
+ socket(url: string, stream: string, params?: string): WebSocket
}
/**
@@ -367,15 +367,14 @@ namespace FriendicaAPI {
/**
* Get connection and receive websocket connection for Pleroma API.
*
- * @param path relative path from baseUrl: normally it is `/streaming`.
+ * @param url Streaming url.
* @param stream Stream name, please refer: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/mastodon_api/mastodon_socket.ex#L19-28
* @returns WebSocket, which inherits from EventEmitter
*/
- public socket(path: string, stream: string, params?: string): WebSocket {
+ public socket(url: string, stream: string, params?: string): WebSocket {
if (!this.accessToken) {
throw new Error('accessToken is required')
}
- const url = this.baseUrl + path
const streaming = new WebSocket(url, stream, params, this.accessToken, this.userAgent)
streaming.start()
diff --git a/megalodon/src/mastodon.ts b/megalodon/src/mastodon.ts
index 374dae1cf..8ca97e7e3 100644
--- a/megalodon/src/mastodon.ts
+++ b/megalodon/src/mastodon.ts
@@ -3144,27 +3144,41 @@ export default class Mastodon implements MegalodonInterface {
// ======================================
// WebSocket
// ======================================
- public userSocket(): Streaming {
- return this.client.socket('/api/v1/streaming', 'user')
+ public async streamingURL(): Promise {
+ const instance = await this.getInstance()
+ if (instance.data.urls) {
+ return instance.data.urls.streaming_api
+ }
+ return this.baseUrl
+ }
+
+ public async userStreaming(): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'user')
}
- public publicSocket(): Streaming {
- return this.client.socket('/api/v1/streaming', 'public')
+ public async publicStreaming(): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'public')
}
- public localSocket(): Streaming {
- return this.client.socket('/api/v1/streaming', 'public:local')
+ public async localStreaming(): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'public:local')
}
- public tagSocket(tag: string): Streaming {
- return this.client.socket('/api/v1/streaming', 'hashtag', `tag=${tag}`)
+ public async tagStreaming(tag: string): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'hashtag', `tag=${tag}`)
}
- public listSocket(list_id: string): Streaming {
- return this.client.socket('/api/v1/streaming', 'list', `list=${list_id}`)
+ public async listStreaming(list_id: string): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'list', `list=${list_id}`)
}
- public directSocket(): Streaming {
- return this.client.socket('/api/v1/streaming', 'direct')
+ public async directStreaming(): Promise {
+ const url = await this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'direct')
}
}
diff --git a/megalodon/src/mastodon/api_client.ts b/megalodon/src/mastodon/api_client.ts
index 81aa7df32..fa7291aee 100644
--- a/megalodon/src/mastodon/api_client.ts
+++ b/megalodon/src/mastodon/api_client.ts
@@ -24,7 +24,7 @@ namespace MastodonAPI {
postForm(path: string, params?: any, headers?: { [key: string]: string }): Promise>
del(path: string, params?: any, headers?: { [key: string]: string }): Promise>
cancel(): void
- socket(path: string, stream: string, params?: string): Streaming
+ socket(url: string, stream: string, params?: string): Streaming
}
/**
@@ -367,15 +367,14 @@ namespace MastodonAPI {
/**
* Get connection and receive websocket connection for Pleroma API.
*
- * @param path relative path from baseUrl: normally it is `/streaming`.
+ * @param url Streaming url.
* @param stream Stream name, please refer: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/mastodon_api/mastodon_socket.ex#L19-28
* @returns WebSocket, which inherits from EventEmitter
*/
- public socket(path: string, stream: string, params?: string): Streaming {
+ public socket(url: string, stream: string, params?: string): Streaming {
if (!this.accessToken) {
throw new Error('accessToken is required')
}
- const url = this.baseUrl + path
const streaming = new Streaming(url, stream, params, this.accessToken, this.userAgent)
streaming.start()
diff --git a/megalodon/src/megalodon.ts b/megalodon/src/megalodon.ts
index 0d7a4aaf1..1df4aac07 100644
--- a/megalodon/src/megalodon.ts
+++ b/megalodon/src/megalodon.ts
@@ -1370,12 +1370,13 @@ export interface MegalodonInterface {
// ======================================
// WebSocket
// ======================================
- userSocket(): WebSocketInterface
- publicSocket(): WebSocketInterface
- localSocket(): WebSocketInterface
- tagSocket(tag: string): WebSocketInterface
- listSocket(list_id: string): WebSocketInterface
- directSocket(): WebSocketInterface
+ streamingURL(): Promise
+ userStreaming(): Promise
+ publicStreaming(): Promise
+ localStreaming(): Promise
+ tagStreaming(tag: string): Promise
+ listStreaming(list_id: string): Promise
+ directStreaming(): Promise
}
export class NotImplementedError extends Error {
diff --git a/megalodon/src/pleroma.ts b/megalodon/src/pleroma.ts
index 96efd25ea..2f36fedfe 100644
--- a/megalodon/src/pleroma.ts
+++ b/megalodon/src/pleroma.ts
@@ -3192,27 +3192,41 @@ export default class Pleroma implements MegalodonInterface {
// ======================================
// WebSocket
// ======================================
- public userSocket(): WebSocket {
- return this.client.socket('/api/v1/streaming', 'user')
+ public async streamingURL(): Promise {
+ const instance = await this.getInstance()
+ if (instance.data.urls) {
+ return instance.data.urls.streaming_api
+ }
+ return this.baseUrl
+ }
+
+ public async userStreaming(): Promise {
+ const url = this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'user')
}
- public publicSocket(): WebSocket {
- return this.client.socket('/api/v1/streaming', 'public')
+ public async publicStreaming(): Promise {
+ const url = this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'public')
}
- public localSocket(): WebSocket {
- return this.client.socket('/api/v1/streaming', 'public:local')
+ public async localStreaming(): Promise {
+ const url = this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'public:local')
}
- public tagSocket(tag: string): WebSocket {
- return this.client.socket('/api/v1/streaming', 'hashtag', `tag=${tag}`)
+ public async tagStreaming(tag: string): Promise {
+ const url = this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'hashtag', `tag=${tag}`)
}
- public listSocket(list_id: string): WebSocket {
- return this.client.socket('/api/v1/streaming', 'list', `list=${list_id}`)
+ public async listStreaming(list_id: string): Promise {
+ const url = this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'list', `list=${list_id}`)
}
- public directSocket(): WebSocket {
- return this.client.socket('/api/v1/streaming', 'direct')
+ public async directStreaming(): Promise {
+ const url = this.streamingURL()
+ return this.client.socket(`${url}/api/v1/streaming`, 'direct')
}
}
diff --git a/megalodon/src/pleroma/api_client.ts b/megalodon/src/pleroma/api_client.ts
index 5cca712dc..6c6d8748a 100644
--- a/megalodon/src/pleroma/api_client.ts
+++ b/megalodon/src/pleroma/api_client.ts
@@ -439,7 +439,7 @@ namespace PleromaAPI {
postForm(path: string, params?: any, headers?: { [key: string]: string }): Promise>
del(path: string, params?: any, headers?: { [key: string]: string }): Promise>
cancel(): void
- socket(path: string, stream: string, params?: string): WebSocket
+ socket(url: string, stream: string, params?: string): WebSocket
}
/**
@@ -775,15 +775,14 @@ namespace PleromaAPI {
/**
* Get connection and receive websocket connection for Pleroma API.
*
- * @param path relative path from baseUrl: normally it is `/streaming`.
+ * @param url Streaming url.
* @param stream Stream name, please refer: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/mastodon_api/mastodon_socket.ex#L19-28
* @returns WebSocket, which inherits from EventEmitter
*/
- public socket(path: string, stream: string, params?: string): WebSocket {
+ public socket(url: string, stream: string, params?: string): WebSocket {
if (!this.accessToken) {
throw new Error('accessToken is required')
}
- const url = this.baseUrl + path
const streaming = new WebSocket(url, stream, params, this.accessToken, this.userAgent)
streaming.start()
From 34851fedfedcc8a23383c9c0b5e659f1b0652b7a Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Mon, 11 Mar 2024 22:47:57 +0900
Subject: [PATCH 2/2] Fix web socket examples
---
example/typescript/src/firefish/web_socket.ts | 52 +++++------
example/typescript/src/mastodon/streaming.ts | 65 ++++++-------
.../src/mastodon/unauthorized_streaming.ts | 67 +++++++-------
example/typescript/src/pleroma/web_socket.ts | 70 +++++++-------
example/vite/src/main.ts | 91 ++++++++++---------
example/webpack/src/index.ts | 73 +++++++--------
megalodon/src/pleroma.ts | 12 +--
7 files changed, 217 insertions(+), 213 deletions(-)
diff --git a/example/typescript/src/firefish/web_socket.ts b/example/typescript/src/firefish/web_socket.ts
index 83c8be2db..aef0ffb79 100644
--- a/example/typescript/src/firefish/web_socket.ts
+++ b/example/typescript/src/firefish/web_socket.ts
@@ -1,39 +1,39 @@
-import generator, { Entity, WebSocketInterface } from 'megalodon'
+import generator, { Entity } from 'megalodon'
import log4js from 'log4js'
-const BASE_URL: string = process.env.FIREFISH_STREAMING_URL!
+const BASE_URL: string = process.env.FIREFISH_URL!
const access_token: string = process.env.FIREFISH_ACCESS_TOKEN!
const client = generator('firefish', BASE_URL, access_token)
-const stream: WebSocketInterface = client.userSocket()
+client.localStreaming().then(stream => {
+ const logger = log4js.getLogger()
+ logger.level = 'debug'
+ stream.on('connect', () => {
+ logger.debug('connect')
+ })
-const logger = log4js.getLogger()
-logger.level = 'debug'
-stream.on('connect', () => {
- logger.debug('connect')
-})
+ stream.on('pong', () => {
+ logger.debug('pong')
+ })
-stream.on('pong', () => {
- logger.debug('pong')
-})
+ stream.on('update', (status: Entity.Status) => {
+ logger.debug(status)
+ })
-stream.on('update', (status: Entity.Status) => {
- logger.debug(status)
-})
+ stream.on('notification', (notification: Entity.Notification) => {
+ logger.debug(notification)
+ })
-stream.on('notification', (notification: Entity.Notification) => {
- logger.debug(notification)
-})
+ stream.on('error', (err: Error) => {
+ console.error(err)
+ })
-stream.on('error', (err: Error) => {
- console.error(err)
-})
-
-stream.on('close', () => {
- logger.debug('close')
-})
+ stream.on('close', () => {
+ logger.debug('close')
+ })
-stream.on('parser-error', (err: Error) => {
- console.error(err)
+ stream.on('parser-error', (err: Error) => {
+ console.error(err)
+ })
})
diff --git a/example/typescript/src/mastodon/streaming.ts b/example/typescript/src/mastodon/streaming.ts
index 57c16e88c..62cb9f23a 100644
--- a/example/typescript/src/mastodon/streaming.ts
+++ b/example/typescript/src/mastodon/streaming.ts
@@ -1,48 +1,49 @@
-import generator, { Entity, WebSocketInterface } from 'megalodon'
+import generator, { Entity } from 'megalodon'
-const BASE_URL: string = process.env.MASTODON_STREAMING_URL!
+const BASE_URL: string = process.env.MASTODON_URL!
const access_token: string = process.env.MASTODON_ACCESS_TOKEN!
const client = generator('mastodon', BASE_URL, access_token)
-const stream: WebSocketInterface = client.localSocket()
-stream.on('connect', () => {
- console.log('connect')
-})
+client.localStreaming().then(stream => {
+ stream.on('connect', () => {
+ console.log('connect')
+ })
-stream.on('pong', () => {
- console.log('pong')
-})
+ stream.on('pong', () => {
+ console.log('pong')
+ })
-stream.on('update', (status: Entity.Status) => {
- console.log(status)
-})
+ stream.on('update', (status: Entity.Status) => {
+ console.log(status)
+ })
-stream.on('notification', (notification: Entity.Notification) => {
- console.log(notification)
-})
+ stream.on('notification', (notification: Entity.Notification) => {
+ console.log(notification)
+ })
-stream.on('delete', (id: number) => {
- console.log(id)
-})
+ stream.on('delete', (id: number) => {
+ console.log(id)
+ })
-stream.on('error', (err: Error) => {
- console.error(err)
-})
+ stream.on('error', (err: Error) => {
+ console.error(err)
+ })
-stream.on('status_update', (status: Entity.Status) => {
- console.log('updated: ', status.url)
-})
+ stream.on('status_update', (status: Entity.Status) => {
+ console.log('updated: ', status.url)
+ })
-stream.on('heartbeat', () => {
- console.log('thump.')
-})
+ stream.on('heartbeat', () => {
+ console.log('thump.')
+ })
-stream.on('close', () => {
- console.log('close')
-})
+ stream.on('close', () => {
+ console.log('close')
+ })
-stream.on('parser-error', (err: Error) => {
- console.error(err)
+ stream.on('parser-error', (err: Error) => {
+ console.error(err)
+ })
})
diff --git a/example/typescript/src/mastodon/unauthorized_streaming.ts b/example/typescript/src/mastodon/unauthorized_streaming.ts
index c1d24d8ca..fabf27869 100644
--- a/example/typescript/src/mastodon/unauthorized_streaming.ts
+++ b/example/typescript/src/mastodon/unauthorized_streaming.ts
@@ -1,52 +1,53 @@
-import generator, { Entity, WebSocketInterface } from 'megalodon'
+import generator, { Entity } from 'megalodon'
declare var process: {
env: {
- MASTODON_STREAMING_URL: string
+ MASTODON_URL: string
}
}
-const url: string = process.env.MASTODON_STREAMING_URL
+const url: string = process.env.MASTODON_URL
const client = generator('mastodon', url)
-const stream: WebSocketInterface = client.localSocket()
-stream.on('connect', () => {
- console.log('connect')
-})
+client.localStreaming().then(stream => {
+ stream.on('connect', () => {
+ console.log('connect')
+ })
-stream.on('pong', () => {
- console.log('pong')
-})
+ stream.on('pong', () => {
+ console.log('pong')
+ })
-stream.on('update', (status: Entity.Status) => {
- console.log(status)
-})
+ stream.on('update', (status: Entity.Status) => {
+ console.log(status)
+ })
-stream.on('notification', (notification: Entity.Notification) => {
- console.log(notification)
-})
+ stream.on('notification', (notification: Entity.Notification) => {
+ console.log(notification)
+ })
-stream.on('delete', (id: number) => {
- console.log(id)
-})
+ stream.on('delete', (id: number) => {
+ console.log(id)
+ })
-stream.on('error', (err: Error) => {
- console.error(err)
-})
+ stream.on('error', (err: Error) => {
+ console.error(err)
+ })
-stream.on('status_update', (status: Entity.Status) => {
- console.log('updated: ', status.url)
-})
+ stream.on('status_update', (status: Entity.Status) => {
+ console.log('updated: ', status.url)
+ })
-stream.on('heartbeat', () => {
- console.log('thump.')
-})
+ stream.on('heartbeat', () => {
+ console.log('thump.')
+ })
-stream.on('close', () => {
- console.log('close')
-})
+ stream.on('close', () => {
+ console.log('close')
+ })
-stream.on('parser-error', (err: Error) => {
- console.error(err)
+ stream.on('parser-error', (err: Error) => {
+ console.error(err)
+ })
})
diff --git a/example/typescript/src/pleroma/web_socket.ts b/example/typescript/src/pleroma/web_socket.ts
index 0c57c06af..b3ef4f249 100644
--- a/example/typescript/src/pleroma/web_socket.ts
+++ b/example/typescript/src/pleroma/web_socket.ts
@@ -1,4 +1,4 @@
-import generator, { Entity, WebSocketInterface } from 'megalodon'
+import generator, { Entity } from 'megalodon'
import log4js from 'log4js'
declare var process: {
@@ -7,52 +7,52 @@ declare var process: {
}
}
-const BASE_URL: string = 'wss://pleroma.io'
+const BASE_URL: string = 'https://pleroma.io'
const access_token: string = process.env.PLEROMA_ACCESS_TOKEN
const client = generator('pleroma', BASE_URL, access_token)
-const stream: WebSocketInterface = client.userSocket()
+client.userStreaming().then(stream => {
+ const logger = log4js.getLogger()
+ logger.level = 'debug'
+ stream.on('connect', () => {
+ logger.debug('connect')
+ })
-const logger = log4js.getLogger()
-logger.level = 'debug'
-stream.on('connect', () => {
- logger.debug('connect')
-})
+ stream.on('pong', () => {
+ logger.debug('pong')
+ })
-stream.on('pong', () => {
- logger.debug('pong')
-})
+ stream.on('update', (status: Entity.Status) => {
+ logger.debug(status.url)
+ })
-stream.on('update', (status: Entity.Status) => {
- logger.debug(status.url)
-})
-
-stream.on('notification', (notification: Entity.Notification) => {
- logger.debug(notification)
-})
+ stream.on('notification', (notification: Entity.Notification) => {
+ logger.debug(notification)
+ })
-stream.on('delete', (id: number) => {
- logger.debug(id)
-})
+ stream.on('delete', (id: number) => {
+ logger.debug(id)
+ })
-stream.on('error', (err: Error) => {
- console.error(err)
-})
+ stream.on('error', (err: Error) => {
+ console.error(err)
+ })
-stream.on('heartbeat', () => {
- logger.debug('thump.')
-})
+ stream.on('heartbeat', () => {
+ logger.debug('thump.')
+ })
-stream.on('status_update', (status: Entity.Status) => {
- logger.debug('updated: ', status.url)
-})
+ stream.on('status_update', (status: Entity.Status) => {
+ logger.debug('updated: ', status.url)
+ })
-stream.on('close', () => {
- logger.debug('close')
-})
+ stream.on('close', () => {
+ logger.debug('close')
+ })
-stream.on('parser-error', (err: Error) => {
- logger.error(err)
+ stream.on('parser-error', (err: Error) => {
+ logger.error(err)
+ })
})
diff --git a/example/vite/src/main.ts b/example/vite/src/main.ts
index 4785b8a65..f76063216 100644
--- a/example/vite/src/main.ts
+++ b/example/vite/src/main.ts
@@ -7,49 +7,50 @@ console.log('start')
const client = generator('mastodon', BASE_URL, ACCESS_TOKEN)
-const stream = client.publicSocket()
-stream.on('connect', () => {
- console.log('connect')
+client.publicStreaming().then(stream => {
+ stream.on('connect', () => {
+ console.log('connect')
+ })
+
+ stream.on('pong', () => {
+ console.log('pong')
+ })
+
+ stream.on('update', (status: Entity.Status) => {
+ console.log(status)
+ })
+
+ stream.on('notification', (notification: Entity.Notification) => {
+ console.log(notification)
+ })
+
+ stream.on('delete', (id: number) => {
+ console.log(id)
+ })
+
+ stream.on('error', (err: Error) => {
+ console.error(err)
+ })
+
+ stream.on('status_update', (status: Entity.Status) => {
+ console.log('updated: ', status.url)
+ })
+
+ stream.on('heartbeat', () => {
+ console.log('thump.')
+ })
+
+ stream.on('close', () => {
+ console.log('close')
+ })
+
+ stream.on('parser-error', (err: Error) => {
+ console.error(err)
+ })
+ //
+ // setTimeout(() => {
+ // stream.removeAllListeners()
+ // stream.stop()
+ // console.log('closed')
+ // }, 10000)
})
-
-stream.on('pong', () => {
- console.log('pong')
-})
-
-stream.on('update', (status: Entity.Status) => {
- console.log(status)
-})
-
-stream.on('notification', (notification: Entity.Notification) => {
- console.log(notification)
-})
-
-stream.on('delete', (id: number) => {
- console.log(id)
-})
-
-stream.on('error', (err: Error) => {
- console.error(err)
-})
-
-stream.on('status_update', (status: Entity.Status) => {
- console.log('updated: ', status.url)
-})
-
-stream.on('heartbeat', () => {
- console.log('thump.')
-})
-
-stream.on('close', () => {
- console.log('close')
-})
-
-stream.on('parser-error', (err: Error) => {
- console.error(err)
-})
-//
-// setTimeout(() => {
-// stream.removeAllListeners()
-// stream.stop()
-// console.log('closed')
-// }, 10000)
diff --git a/example/webpack/src/index.ts b/example/webpack/src/index.ts
index 61ce734af..e0527919d 100644
--- a/example/webpack/src/index.ts
+++ b/example/webpack/src/index.ts
@@ -7,49 +7,50 @@ console.log('start')
const client = generator('mastodon', BASE_URL, ACCESS_TOKEN)
-const stream = client.publicSocket()
-stream.on('connect', () => {
- console.log('connect')
-})
+client.publicStreaming().then(stream => {
+ stream.on('connect', () => {
+ console.log('connect')
+ })
-stream.on('pong', () => {
- console.log('pong')
-})
+ stream.on('pong', () => {
+ console.log('pong')
+ })
-stream.on('update', (status: Entity.Status) => {
- console.log(status)
-})
+ stream.on('update', (status: Entity.Status) => {
+ console.log(status)
+ })
-stream.on('notification', (notification: Entity.Notification) => {
- console.log(notification)
-})
+ stream.on('notification', (notification: Entity.Notification) => {
+ console.log(notification)
+ })
-stream.on('delete', (id: number) => {
- console.log(id)
-})
+ stream.on('delete', (id: number) => {
+ console.log(id)
+ })
-stream.on('error', (err: Error) => {
- console.error(err)
-})
+ stream.on('error', (err: Error) => {
+ console.error(err)
+ })
-stream.on('status_update', (status: Entity.Status) => {
- console.log('updated: ', status.url)
-})
+ stream.on('status_update', (status: Entity.Status) => {
+ console.log('updated: ', status.url)
+ })
-stream.on('heartbeat', () => {
- console.log('thump.')
-})
+ stream.on('heartbeat', () => {
+ console.log('thump.')
+ })
-stream.on('close', () => {
- console.log('close')
-})
+ stream.on('close', () => {
+ console.log('close')
+ })
-stream.on('parser-error', (err: Error) => {
- console.error(err)
-})
+ stream.on('parser-error', (err: Error) => {
+ console.error(err)
+ })
-setTimeout(() => {
- stream.removeAllListeners()
- stream.stop()
- console.log('closed')
-}, 100000)
+ setTimeout(() => {
+ stream.removeAllListeners()
+ stream.stop()
+ console.log('closed')
+ }, 100000)
+})
diff --git a/megalodon/src/pleroma.ts b/megalodon/src/pleroma.ts
index 2f36fedfe..fe986f501 100644
--- a/megalodon/src/pleroma.ts
+++ b/megalodon/src/pleroma.ts
@@ -3201,32 +3201,32 @@ export default class Pleroma implements MegalodonInterface {
}
public async userStreaming(): Promise {
- const url = this.streamingURL()
+ const url = await this.streamingURL()
return this.client.socket(`${url}/api/v1/streaming`, 'user')
}
public async publicStreaming(): Promise {
- const url = this.streamingURL()
+ const url = await this.streamingURL()
return this.client.socket(`${url}/api/v1/streaming`, 'public')
}
public async localStreaming(): Promise {
- const url = this.streamingURL()
+ const url = await this.streamingURL()
return this.client.socket(`${url}/api/v1/streaming`, 'public:local')
}
public async tagStreaming(tag: string): Promise {
- const url = this.streamingURL()
+ const url = await this.streamingURL()
return this.client.socket(`${url}/api/v1/streaming`, 'hashtag', `tag=${tag}`)
}
public async listStreaming(list_id: string): Promise {
- const url = this.streamingURL()
+ const url = await this.streamingURL()
return this.client.socket(`${url}/api/v1/streaming`, 'list', `list=${list_id}`)
}
public async directStreaming(): Promise {
- const url = this.streamingURL()
+ const url = await this.streamingURL()
return this.client.socket(`${url}/api/v1/streaming`, 'direct')
}
}