megalodon/docs/index.html
2021-10-02 17:17:35 +09:00

121 lines
34 KiB
HTML

<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>megalodon</title><meta name="description" content="Documentation for megalodon"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script async src="assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base="."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="index.html" class="title">megalodon</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label><input type="checkbox" id="tsd-filter-externals" checked/><label class="tsd-widget" for="tsd-filter-externals">Externals</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><h1>megalodon</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><div class="tsd-panel tsd-typography">
<a href="#megalodon" id="megalodon" style="color: inherit; text-decoration: none;">
<h1>Megalodon</h1>
</a>
<p><a href="https://github.com/h3poteto/megalodon/actions?query=branch%3Amaster+workflow%3ATest"><img src="https://github.com/h3poteto/megalodon/workflows/Test/badge.svg" alt="Test"></a>
<a href="https://www.npmjs.com/package/megalodon"><img src="https://img.shields.io/npm/v/megalodon.svg" alt="NPM Version"></a>
<a href="https://github.com/h3poteto/megalodon/releases"><img src="https://img.shields.io/github/release/h3poteto/megalodon.svg" alt="GitHub release"></a>
<a href="https://www.npmjs.com/package/megalodon"><img src="https://img.shields.io/npm/dm/megalodon" alt="npm"></a>
<a href="/LICENSE.txt"><img src="https://img.shields.io/npm/l/megalodon" alt="NPM"></a></p>
<p>A Mastodon, Pleroma and Misskey API Client library for node.js and browser. It provides REST API and streaming methods.
By using this library, you can take Mastodon, Pleroma and Misskey with the same interface.</p>
<a href="#migrate-v2x-to-v300" id="migrate-v2x-to-v300" style="color: inherit; text-decoration: none;">
<h2>!!Migrate v2.x to v3.0.0</h2>
</a>
<p>There are some breaking changes, so you can not update megalodon out of the box.
Please refer <a href="migration_guide.md">migration guide</a> before you update megalodon version.</p>
<a href="#features" id="features" style="color: inherit; text-decoration: none;">
<h2>Features</h2>
</a>
<ul>
<li>REST API</li>
<li>Streaming with Server-Sent Event</li>
<li>Streaming with WebSocket</li>
<li>Promisified methods</li>
<li>Proxy support</li>
<li>Support node.js and browser</li>
<li>Written in typescript</li>
</ul>
<a href="#install" id="install" style="color: inherit; text-decoration: none;">
<h2>Install</h2>
</a>
<pre><code><span class="hl-0">$</span><span class="hl-1"> </span><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-0">install</span><span class="hl-1"> -</span><span class="hl-2">S</span><span class="hl-1"> </span><span class="hl-0">megalodon</span>
</code></pre>
<p>or</p>
<pre><code><span class="hl-0">$</span><span class="hl-1"> </span><span class="hl-0">yarn</span><span class="hl-1"> </span><span class="hl-0">add</span><span class="hl-1"> </span><span class="hl-0">megalodon</span>
</code></pre>
<a href="#build-for-browser" id="build-for-browser" style="color: inherit; text-decoration: none;">
<h3>Build for browser</h3>
</a>
<p><strong>Important</strong>: In browser, you can not use proxy.</p>
<p>If you want to build for browser, please use Webpack and set empty value for these libraries.</p>
<ul>
<li>net</li>
<li>tls</li>
<li>dns</li>
</ul>
<pre><code class="language-javascript"><span class="hl-1"> </span><span class="hl-3">node</span><span class="hl-1">: {</span><br/><span class="hl-1"> </span><span class="hl-3">net</span><span class="hl-1">: </span><span class="hl-4">&#39;empty&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-3">tls</span><span class="hl-1">: </span><span class="hl-4">&#39;empty&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-3">dns</span><span class="hl-1">: </span><span class="hl-4">&#39;empty&#39;</span><br/><span class="hl-1"> }</span>
</code></pre>
<p>These libraries are for node.js, so can not use in browser.</p>
<p><a href="example/browser/webpack.config.js">Here</a> is example Webpack configuration.</p>
<a href="#usage" id="usage" style="color: inherit; text-decoration: none;">
<h2>Usage</h2>
</a>
<p>I prepared <a href="example">examples</a>, and please refer <a href="https://h3poteto.github.io/megalodon/">documents</a> about each methods.</p>
<p>I explain some typical methods.
At first, please get your access token for a fediverse server.
If you don&#39;t have access token, or you want to register applications and get access token programmably, please refer <a href="#authorization">Authorization section</a>.</p>
<a href="#home-timeline" id="home-timeline" style="color: inherit; text-decoration: none;">
<h3>Home timeline</h3>
</a>
<pre><code class="language-typescript"><span class="hl-5">import</span><span class="hl-1"> </span><span class="hl-0">generator</span><span class="hl-1">, { </span><span class="hl-0">Entity</span><span class="hl-1">, </span><span class="hl-0">Response</span><span class="hl-1"> } </span><span class="hl-5">from</span><span class="hl-1"> </span><span class="hl-4">&#39;megalodon&#39;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">BASE_URL</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> = </span><span class="hl-4">&#39;https://mastodon.social&#39;</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">access_token</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> = </span><span class="hl-4">&#39;...&#39;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1"> = </span><span class="hl-8">generator</span><span class="hl-1">(</span><span class="hl-4">&#39;mastodon&#39;</span><span class="hl-1">, </span><span class="hl-2">BASE_URL</span><span class="hl-1">, </span><span class="hl-0">access_token</span><span class="hl-1">)</span><br/><span class="hl-0">client</span><span class="hl-1">.</span><span class="hl-8">getHomeTimeline</span><span class="hl-1">()</span><br/><span class="hl-1"> .</span><span class="hl-8">then</span><span class="hl-1">((</span><span class="hl-0">res</span><span class="hl-1">: </span><span class="hl-7">Response</span><span class="hl-1">&lt;</span><span class="hl-7">Array</span><span class="hl-1">&lt;</span><span class="hl-7">Entity</span><span class="hl-1">.</span><span class="hl-7">Status</span><span class="hl-1">&gt;&gt;) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">res</span><span class="hl-1">.</span><span class="hl-0">data</span><span class="hl-1">)</span><br/><span class="hl-1"> })</span>
</code></pre>
<a href="#post-toot" id="post-toot" style="color: inherit; text-decoration: none;">
<h3>Post toot</h3>
</a>
<pre><code class="language-typescript"><span class="hl-5">import</span><span class="hl-1"> </span><span class="hl-0">generator</span><span class="hl-1">, { </span><span class="hl-0">Entity</span><span class="hl-1">, </span><span class="hl-0">Response</span><span class="hl-1"> } </span><span class="hl-5">from</span><span class="hl-1"> </span><span class="hl-4">&#39;megalodon&#39;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">BASE_URL</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> = </span><span class="hl-4">&#39;https://mastodon.social&#39;</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">access_token</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> = </span><span class="hl-4">&#39;...&#39;</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">toot</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> = </span><span class="hl-4">&#39;test toot&#39;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1"> = </span><span class="hl-8">generator</span><span class="hl-1">(</span><span class="hl-4">&#39;mastodon&#39;</span><span class="hl-1">, </span><span class="hl-2">BASE_URL</span><span class="hl-1">, </span><span class="hl-0">access_token</span><span class="hl-1">)</span><br/><span class="hl-0">client</span><span class="hl-1">.</span><span class="hl-8">postStatus</span><span class="hl-1">(</span><span class="hl-0">toot</span><span class="hl-1">)</span><br/><span class="hl-1"> .</span><span class="hl-8">then</span><span class="hl-1">((</span><span class="hl-0">res</span><span class="hl-1">: </span><span class="hl-7">Response</span><span class="hl-1">&lt;</span><span class="hl-7">Entity</span><span class="hl-1">.</span><span class="hl-7">Status</span><span class="hl-1">&gt;) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">res</span><span class="hl-1">.</span><span class="hl-0">data</span><span class="hl-1">)</span><br/><span class="hl-1"> })</span>
</code></pre>
<a href="#post-medias" id="post-medias" style="color: inherit; text-decoration: none;">
<h3>Post medias</h3>
</a>
<p>Please provide a file to the argument.</p>
<pre><code class="language-typescript"><span class="hl-5">import</span><span class="hl-1"> </span><span class="hl-0">generator</span><span class="hl-1">, { </span><span class="hl-0">Entity</span><span class="hl-1">, </span><span class="hl-0">Response</span><span class="hl-1"> } </span><span class="hl-5">from</span><span class="hl-1"> </span><span class="hl-4">&#39;megalodon&#39;</span><br/><span class="hl-5">import</span><span class="hl-1"> </span><span class="hl-0">fs</span><span class="hl-1"> </span><span class="hl-5">from</span><span class="hl-1"> </span><span class="hl-4">&#39;fs&#39;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">BASE_URL</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> = </span><span class="hl-4">&#39;https://mastodon.social&#39;</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">access_token</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> = </span><span class="hl-4">&#39;...&#39;</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">image</span><span class="hl-1"> = </span><span class="hl-0">fs</span><span class="hl-1">.</span><span class="hl-8">readFileSync</span><span class="hl-1">(</span><span class="hl-4">&quot;test.image&quot;</span><span class="hl-1">)</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1"> = </span><span class="hl-8">generator</span><span class="hl-1">(</span><span class="hl-4">&#39;mastodon&#39;</span><span class="hl-1">, </span><span class="hl-2">BASE_URL</span><span class="hl-1">, </span><span class="hl-0">access_token</span><span class="hl-1">)</span><br/><span class="hl-0">client</span><span class="hl-1">.</span><span class="hl-8">uploadMedia</span><span class="hl-1">(</span><span class="hl-0">image</span><span class="hl-1">)</span><br/><span class="hl-1"> .</span><span class="hl-8">then</span><span class="hl-1">((</span><span class="hl-0">res</span><span class="hl-1">: </span><span class="hl-7">Response</span><span class="hl-1">&lt;</span><span class="hl-7">Entity</span><span class="hl-1">.</span><span class="hl-7">Attachment</span><span class="hl-1">&gt;) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">res</span><span class="hl-1">.</span><span class="hl-0">data</span><span class="hl-1">)</span><br/><span class="hl-1"> })</span>
</code></pre>
<a href="#websocket-streaming" id="websocket-streaming" style="color: inherit; text-decoration: none;">
<h3>WebSocket streaming</h3>
</a>
<p>Mastodon, Pleroma and Misskey provide WebSocket for streaming.</p>
<pre><code class="language-typescript"><span class="hl-5">import</span><span class="hl-1"> </span><span class="hl-0">generator</span><span class="hl-1">, { </span><span class="hl-0">Entity</span><span class="hl-1">, </span><span class="hl-0">WebSocketInterface</span><span class="hl-1"> } </span><span class="hl-5">from</span><span class="hl-1"> </span><span class="hl-4">&#39;megalodon&#39;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">BASE_URL</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> = </span><span class="hl-4">&#39;wss://pleroma.io&#39;</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">access_token</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> = </span><span class="hl-4">&#39;...&#39;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1"> = </span><span class="hl-8">generator</span><span class="hl-1">(</span><span class="hl-4">&#39;pleroma&#39;</span><span class="hl-1">, </span><span class="hl-2">BASE_URL</span><span class="hl-1">, </span><span class="hl-0">access_token</span><span class="hl-1">)</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">stream</span><span class="hl-1">: </span><span class="hl-7">WebSocketInterface</span><span class="hl-1"> = </span><span class="hl-0">client</span><span class="hl-1">.</span><span class="hl-8">userSocket</span><span class="hl-1">()</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;connect&#39;</span><span class="hl-1">, () </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-4">&#39;connect&#39;</span><span class="hl-1">)</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;update&#39;</span><span class="hl-1">, (</span><span class="hl-0">status</span><span class="hl-1">: </span><span class="hl-7">Entity</span><span class="hl-1">.</span><span class="hl-7">Status</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">status</span><span class="hl-1">)</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;notification&#39;</span><span class="hl-1">, (</span><span class="hl-0">notification</span><span class="hl-1">: </span><span class="hl-7">Entity</span><span class="hl-1">.</span><span class="hl-7">Notification</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">notification</span><span class="hl-1">)</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;delete&#39;</span><span class="hl-1">, (</span><span class="hl-0">id</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">id</span><span class="hl-1">)</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;error&#39;</span><span class="hl-1">, (</span><span class="hl-0">err</span><span class="hl-1">: </span><span class="hl-7">Error</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">error</span><span class="hl-1">(</span><span class="hl-0">err</span><span class="hl-1">)</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;heartbeat&#39;</span><span class="hl-1">, () </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-4">&#39;thump.&#39;</span><span class="hl-1">)</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;close&#39;</span><span class="hl-1">, () </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-4">&#39;close&#39;</span><span class="hl-1">)</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;parser-error&#39;</span><span class="hl-1">, (</span><span class="hl-0">err</span><span class="hl-1">: </span><span class="hl-7">Error</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">error</span><span class="hl-1">(</span><span class="hl-0">err</span><span class="hl-1">)</span><br/><span class="hl-1">})</span>
</code></pre>
<a href="#http-streaming" id="http-streaming" style="color: inherit; text-decoration: none;">
<h3>HTTP Streaming</h3>
</a>
<p>Mastodon provides HTTP streaming.</p>
<pre><code class="language-typescript"><span class="hl-5">import</span><span class="hl-1"> </span><span class="hl-0">generator</span><span class="hl-1">, { </span><span class="hl-0">Entity</span><span class="hl-1">, </span><span class="hl-0">StreamListenerInterface</span><span class="hl-1"> } </span><span class="hl-5">from</span><span class="hl-1"> </span><span class="hl-4">&#39;megalodon&#39;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">BASE_URL</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> = </span><span class="hl-4">&#39;https://mastodon.social&#39;</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">access_token</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> = </span><span class="hl-4">&#39;...&#39;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1"> = </span><span class="hl-8">generator</span><span class="hl-1">(</span><span class="hl-4">&#39;mastodon&#39;</span><span class="hl-1">, </span><span class="hl-2">BASE_URL</span><span class="hl-1">, </span><span class="hl-0">access_token</span><span class="hl-1">)</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">stream</span><span class="hl-1">: </span><span class="hl-7">StreamListenerInterface</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;update&#39;</span><span class="hl-1">, (</span><span class="hl-0">status</span><span class="hl-1">: </span><span class="hl-7">Entity</span><span class="hl-1">.</span><span class="hl-7">Status</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">status</span><span class="hl-1">)</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;notification&#39;</span><span class="hl-1">, (</span><span class="hl-0">notification</span><span class="hl-1">: </span><span class="hl-7">Entity</span><span class="hl-1">.</span><span class="hl-7">Notification</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">notification</span><span class="hl-1">)</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;delete&#39;</span><span class="hl-1">, (</span><span class="hl-0">id</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">id</span><span class="hl-1">)</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;error&#39;</span><span class="hl-1">, (</span><span class="hl-0">err</span><span class="hl-1">: </span><span class="hl-7">Error</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">error</span><span class="hl-1">(</span><span class="hl-0">err</span><span class="hl-1">)</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-0">stream</span><span class="hl-1">.</span><span class="hl-8">on</span><span class="hl-1">(</span><span class="hl-4">&#39;heartbeat&#39;</span><span class="hl-1">, () </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-4">&#39;thump.&#39;</span><span class="hl-1">)</span><br/><span class="hl-1">})</span>
</code></pre>
<a href="#authorization" id="authorization" style="color: inherit; text-decoration: none;">
<h3>Authorization</h3>
</a>
<p>You can register applications, and get access tokens to use this method.</p>
<pre><code class="language-typescript"><span class="hl-5">import</span><span class="hl-1"> </span><span class="hl-0">generator</span><span class="hl-1">, { </span><span class="hl-0">OAuth</span><span class="hl-1"> } </span><span class="hl-5">from</span><span class="hl-1"> </span><span class="hl-4">&#39;megalodon&#39;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">BASE_URL</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> = </span><span class="hl-4">&#39;https://mastodon.social&#39;</span><br/><br/><span class="hl-6">let</span><span class="hl-1"> </span><span class="hl-0">clientId</span><span class="hl-1">: </span><span class="hl-7">string</span><br/><span class="hl-6">let</span><span class="hl-1"> </span><span class="hl-0">clientSecret</span><span class="hl-1">: </span><span class="hl-7">string</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1"> = </span><span class="hl-8">generator</span><span class="hl-1">(</span><span class="hl-4">&#39;mastodon&#39;</span><span class="hl-1">, </span><span class="hl-2">BASE_URL</span><span class="hl-1">)</span><br/><br/><span class="hl-0">client</span><span class="hl-1">.</span><span class="hl-8">registerApp</span><span class="hl-1">(</span><span class="hl-4">&#39;Test App&#39;</span><span class="hl-1">)</span><br/><span class="hl-1"> .</span><span class="hl-8">then</span><span class="hl-1">(</span><span class="hl-0">appData</span><span class="hl-1"> </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">clientId</span><span class="hl-1"> = </span><span class="hl-0">appData</span><span class="hl-1">.</span><span class="hl-0">clientId</span><br/><span class="hl-1"> </span><span class="hl-0">clientSecret</span><span class="hl-1"> = </span><span class="hl-0">appData</span><span class="hl-1">.</span><span class="hl-0">clientSecret</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-4">&#39;Authorization URL is generated.&#39;</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">appData</span><span class="hl-1">.</span><span class="hl-0">url</span><span class="hl-1">)</span><br/><span class="hl-1"> })</span>
</code></pre>
<p>Please open <code>Autorhization URL</code> in your browser, and authorize this app.
In this time, you can get authorization code.</p>
<p>After that, get an access token.</p>
<pre><code class="language-typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">code</span><span class="hl-1"> = </span><span class="hl-4">&#39;...&#39;</span><span class="hl-1"> </span><span class="hl-9">// Authorization code</span><br/><br/><span class="hl-0">client</span><span class="hl-1">.</span><span class="hl-8">fetchAccessToken</span><span class="hl-1">(</span><span class="hl-0">clientId</span><span class="hl-1">, </span><span class="hl-0">clientSecret</span><span class="hl-1">, </span><span class="hl-0">code</span><span class="hl-1">)</span><br/><span class="hl-1">})</span><br/><span class="hl-1"> .</span><span class="hl-8">then</span><span class="hl-1">((</span><span class="hl-0">tokenData</span><span class="hl-1">: </span><span class="hl-7">OAuth</span><span class="hl-1">.</span><span class="hl-7">TokenData</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">tokenData</span><span class="hl-1">.</span><span class="hl-0">accessToken</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">tokenData</span><span class="hl-1">.</span><span class="hl-0">refreshToken</span><span class="hl-1">)</span><br/><span class="hl-1"> })</span><br/><span class="hl-1"> .</span><span class="hl-8">catch</span><span class="hl-1">((</span><span class="hl-0">err</span><span class="hl-1">: </span><span class="hl-7">Error</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> </span><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">error</span><span class="hl-1">(</span><span class="hl-0">err</span><span class="hl-1">))</span>
</code></pre>
<a href="#detect-each-sns" id="detect-each-sns" style="color: inherit; text-decoration: none;">
<h3>Detect each SNS</h3>
</a>
<p>You have to provide SNS name <code>mastodon</code>, <code>pleroma</code> or <code>misskey</code> to <code>generator</code> function.
But when you only know the URL and not the SNS, <code>detector</code> function can detect the SNS.</p>
<pre><code class="language-typescript"><span class="hl-5">import</span><span class="hl-1"> { </span><span class="hl-0">detector</span><span class="hl-1"> } </span><span class="hl-5">from</span><span class="hl-1"> </span><span class="hl-4">&#39;megalodon&#39;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">URL</span><span class="hl-1"> = </span><span class="hl-4">&#39;https://misskey.io&#39;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-2">sns</span><span class="hl-1"> = </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-8">detector</span><span class="hl-1">(</span><span class="hl-2">URL</span><span class="hl-1">)</span><br/><span class="hl-0">console</span><span class="hl-1">.</span><span class="hl-8">log</span><span class="hl-1">(</span><span class="hl-0">sns</span><span class="hl-1">)</span>
</code></pre>
<a href="#license" id="license" style="color: inherit; text-decoration: none;">
<h2>License</h2>
</a>
<p>The software is available as open source under the terms of the <a href="https://opensource.org/licenses/MIT">MIT License</a>.</p>
</div></div><div class="col-4 col-menu menu-sticky-wrap menu-highlight"><nav class="tsd-navigation primary"><ul><li class="current"><a href="modules.html">Exports</a></li><li class=" tsd-kind-namespace"><a href="modules/Entity.html">Entity</a></li><li class=" tsd-kind-namespace"><a href="modules/FilterContext.html">Filter<wbr/>Context</a></li><li class=" tsd-kind-namespace"><a href="modules/NotificationType.html">Notification<wbr/>Type</a></li><li class=" tsd-kind-namespace"><a href="modules/OAuth.html">OAuth</a></li></ul></nav><nav class="tsd-navigation secondary menu-sticky"><ul><li class="tsd-kind-class"><a href="classes/Mastodon.html" class="tsd-kind-icon">Mastodon</a></li><li class="tsd-kind-class"><a href="classes/Misskey.html" class="tsd-kind-icon">Misskey</a></li><li class="tsd-kind-class"><a href="classes/Pleroma.html" class="tsd-kind-icon">Pleroma</a></li><li class="tsd-kind-class"><a href="classes/RequestCanceledError.html" class="tsd-kind-icon">Request<wbr/>Canceled<wbr/>Error</a></li><li class="tsd-kind-interface"><a href="interfaces/MegalodonInterface.html" class="tsd-kind-icon">Megalodon<wbr/>Interface</a></li><li class="tsd-kind-interface"><a href="interfaces/StreamListenerInterface.html" class="tsd-kind-icon">Stream<wbr/>Listener<wbr/>Interface</a></li><li class="tsd-kind-interface"><a href="interfaces/WebSocketInterface.html" class="tsd-kind-icon">Web<wbr/>Socket<wbr/>Interface</a></li><li class="tsd-kind-type-alias"><a href="modules.html#ProxyConfig" class="tsd-kind-icon">Proxy<wbr/>Config</a></li><li class="tsd-kind-type-alias tsd-has-type-parameter"><a href="modules.html#Response" class="tsd-kind-icon">Response</a></li><li class="tsd-kind-function"><a href="modules.html#default" class="tsd-kind-icon">default</a></li><li class="tsd-kind-function"><a href="modules.html#detector" class="tsd-kind-icon">detector</a></li><li class="tsd-kind-function"><a href="modules.html#isCancel" class="tsd-kind-icon">is<wbr/>Cancel</a></li></ul></nav></div></div></div><footer class="with-border-bottom"><div class="container"><h2>Legend</h2><div class="tsd-legend-group"><ul class="tsd-legend"><li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li><li class="tsd-kind-property tsd-parent-kind-class"><span class="tsd-kind-icon">Property</span></li><li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-method tsd-parent-kind-interface"><span class="tsd-kind-icon">Method</span></li></ul></div><h2>Settings</h2><p>Theme <select id="theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></p></div></footer><div class="container tsd-generator"><p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div><div class="overlay"></div><script src="assets/main.js"></script></body></html>