3891 lines
130 KiB
JavaScript
3891 lines
130 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var ponyfills = require('@mastojs/ponyfills');
|
||
|
var semver = require('semver');
|
||
|
var qs = require('qs');
|
||
|
var changeCase = require('change-case');
|
||
|
var EventEmitter = require('eventemitter3');
|
||
|
var WebSocket = require('isomorphic-ws');
|
||
|
|
||
|
/**
|
||
|
* Error object
|
||
|
* @see https://docs.joinmastodon.org/entities/error/
|
||
|
*/
|
||
|
class MastoError extends Error {
|
||
|
/**
|
||
|
* @param message The error message. Equivalent for the `error` field from the Error entity
|
||
|
* @param props Additional properties
|
||
|
*/
|
||
|
constructor(message, props = {}) {
|
||
|
super(message, { cause: props.cause });
|
||
|
this.name = 'MastoError';
|
||
|
/** Helper to check if the error has been thrown from Masto */
|
||
|
this.isMastoError = true;
|
||
|
Object.setPrototypeOf(this, MastoError.prototype);
|
||
|
this.description = props.description;
|
||
|
this.details = props.details;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class MastoHttpError extends MastoError {
|
||
|
constructor(message, statusCode, props) {
|
||
|
super(message, props);
|
||
|
this.name = 'MastoHttpError';
|
||
|
Object.setPrototypeOf(this, MastoHttpError.prototype);
|
||
|
this.statusCode = statusCode;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mastodon forbidden error
|
||
|
*/
|
||
|
class MastoHttpConflictError extends MastoHttpError {
|
||
|
constructor(message, props) {
|
||
|
super(message, 409, props);
|
||
|
this.name = 'MastoHttpConflictError';
|
||
|
Object.setPrototypeOf(this, MastoHttpConflictError.prototype);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mastodon forbidden error
|
||
|
*/
|
||
|
class MastoHttpForbiddenError extends MastoHttpError {
|
||
|
constructor(message, props) {
|
||
|
super(message, 403, props);
|
||
|
this.name = 'MastoHttpForbiddenError';
|
||
|
Object.setPrototypeOf(this, MastoHttpForbiddenError.prototype);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mastodon gone error
|
||
|
*/
|
||
|
class MastoHttpGoneError extends MastoHttpError {
|
||
|
constructor(message, props) {
|
||
|
super(message, 410, props);
|
||
|
this.name = 'MastoHttpGoneError';
|
||
|
Object.setPrototypeOf(this, MastoHttpGoneError.prototype);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mastodon not found error class
|
||
|
*/
|
||
|
class MastoHttpNotFoundError extends MastoHttpError {
|
||
|
constructor(message, props) {
|
||
|
super(message, 404, props);
|
||
|
this.name = 'MastoHttpNotFoundError';
|
||
|
Object.setPrototypeOf(this, MastoHttpNotFoundError.prototype);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mastodon rate limit error class
|
||
|
*/
|
||
|
class MastoHttpRateLimitError extends MastoHttpError {
|
||
|
constructor(message, props) {
|
||
|
super(message, 429, props);
|
||
|
this.name = 'MastoHttpRateLimitError';
|
||
|
Object.setPrototypeOf(this, MastoHttpRateLimitError.prototype);
|
||
|
this.limit = props === null || props === void 0 ? void 0 : props.limit;
|
||
|
this.remaining = props === null || props === void 0 ? void 0 : props.remaining;
|
||
|
this.reset = props === null || props === void 0 ? void 0 : props.reset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mastodon unauthorized error class
|
||
|
*/
|
||
|
class MastoHttpUnauthorizedError extends MastoHttpError {
|
||
|
constructor(message, props) {
|
||
|
super(message, 401, props);
|
||
|
this.name = 'MastoHttpUnauthorizedError';
|
||
|
Object.setPrototypeOf(this, MastoHttpUnauthorizedError.prototype);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class MastoHttpUnexpectedError extends MastoHttpError {
|
||
|
constructor(message, statusCode, props) {
|
||
|
super(message, statusCode, props);
|
||
|
this.name = 'MastoHttpUnexpectedError';
|
||
|
Object.setPrototypeOf(this, MastoHttpUnexpectedError.prototype);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mastodon unprocessable entity
|
||
|
*/
|
||
|
class MastoHttpUnprocessableEntityError extends MastoHttpError {
|
||
|
constructor(message, props) {
|
||
|
super(message, 422, props);
|
||
|
this.name = 'MastoHttpUnprocessableEntityError';
|
||
|
Object.setPrototypeOf(this, MastoHttpUnprocessableEntityError.prototype);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const createHttpError = (params) => {
|
||
|
var _a, _b;
|
||
|
const message = (_a = params.message) !== null && _a !== void 0 ? _a : 'Unexpected error occurred';
|
||
|
const props = {
|
||
|
cause: params.cause,
|
||
|
description: (_b = params.description) !== null && _b !== void 0 ? _b : 'No further description is provided for this error',
|
||
|
details: params.details,
|
||
|
};
|
||
|
switch (params.statusCode) {
|
||
|
case 401: {
|
||
|
return new MastoHttpUnauthorizedError(message, props);
|
||
|
}
|
||
|
case 403: {
|
||
|
return new MastoHttpForbiddenError(message, props);
|
||
|
}
|
||
|
case 404: {
|
||
|
return new MastoHttpNotFoundError(message, props);
|
||
|
}
|
||
|
case 409: {
|
||
|
return new MastoHttpConflictError(message, props);
|
||
|
}
|
||
|
case 410: {
|
||
|
return new MastoHttpGoneError(message, props);
|
||
|
}
|
||
|
case 422: {
|
||
|
return new MastoHttpUnprocessableEntityError(message, props);
|
||
|
}
|
||
|
case 429: {
|
||
|
return new MastoHttpRateLimitError(message, Object.assign(Object.assign({}, props), { limit: params.limit, remaining: params.remaining, reset: params.reset }));
|
||
|
}
|
||
|
default: {
|
||
|
return new MastoHttpUnexpectedError(message, params.statusCode, props);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class MastoUnexpectedError extends MastoError {
|
||
|
constructor(message, props = {}) {
|
||
|
super(message, { cause: props.cause });
|
||
|
this.name = 'MastoUnexpectedError';
|
||
|
Object.setPrototypeOf(this, MastoUnexpectedError.prototype);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mastodon Deserialize error
|
||
|
*/
|
||
|
class MastoDeserializeError extends MastoError {
|
||
|
constructor(message, contentType, data, props) {
|
||
|
super(message, props);
|
||
|
this.contentType = contentType;
|
||
|
this.data = data;
|
||
|
this.name = 'MastoDeserializeError';
|
||
|
Object.setPrototypeOf(this, MastoDeserializeError.prototype);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mastodon version error
|
||
|
*/
|
||
|
class MastoVersionError extends MastoError {
|
||
|
constructor(message, props) {
|
||
|
super(message, props);
|
||
|
this.name = 'MastoVersionError';
|
||
|
Object.setPrototypeOf(this, MastoVersionError.prototype);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mastodon invalid argument error
|
||
|
*/
|
||
|
class MastoInvalidArgumentError extends MastoError {
|
||
|
constructor(message, props) {
|
||
|
super(message, props);
|
||
|
this.name = 'MastoInvalidArgumentError';
|
||
|
Object.setPrototypeOf(this, MastoInvalidArgumentError.prototype);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mastodon Timeout error
|
||
|
*/
|
||
|
class MastoTimeoutError extends MastoError {
|
||
|
constructor(message, props) {
|
||
|
super(message, props);
|
||
|
this.name = 'MastoTimeoutError';
|
||
|
Object.setPrototypeOf(this, MastoTimeoutError.prototype);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class BaseLogger {
|
||
|
constructor(logLevel) {
|
||
|
this.logLevel = logLevel;
|
||
|
}
|
||
|
debug(message, meta) {
|
||
|
if (this.logLevel.satisfies('debug')) {
|
||
|
this.log('debug', message, meta);
|
||
|
}
|
||
|
}
|
||
|
info(message, meta) {
|
||
|
if (this.logLevel.satisfies('info')) {
|
||
|
this.log('info', message, meta);
|
||
|
}
|
||
|
}
|
||
|
warn(message, meta) {
|
||
|
if (this.logLevel.satisfies('warn')) {
|
||
|
this.log('warn', message, meta);
|
||
|
}
|
||
|
}
|
||
|
error(message, meta) {
|
||
|
if (this.logLevel.satisfies('error')) {
|
||
|
this.log('error', message, meta);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* eslint-disable no-console */
|
||
|
class LoggerConsoleImpl extends BaseLogger {
|
||
|
constructor(logLevel) {
|
||
|
super(logLevel);
|
||
|
}
|
||
|
log(type, message, meta) {
|
||
|
switch (type) {
|
||
|
case 'debug': {
|
||
|
console.debug(message, meta);
|
||
|
return;
|
||
|
}
|
||
|
case 'info': {
|
||
|
console.info(message, meta);
|
||
|
return;
|
||
|
}
|
||
|
case 'warn': {
|
||
|
console.warn(message, meta);
|
||
|
return;
|
||
|
}
|
||
|
case 'error': {
|
||
|
console.error(message, meta);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* eslint-disable unicorn/prefer-math-trunc */
|
||
|
const LOG_TYPES = Object.freeze({
|
||
|
DEBUG: 1 << 0,
|
||
|
INFO: 1 << 1,
|
||
|
WARN: 1 << 2,
|
||
|
ERROR: 1 << 3,
|
||
|
});
|
||
|
class LogLevel {
|
||
|
constructor(level) {
|
||
|
this.level = level;
|
||
|
}
|
||
|
satisfies(type) {
|
||
|
switch (type) {
|
||
|
case 'debug': {
|
||
|
return Boolean(this.level & LOG_TYPES.DEBUG);
|
||
|
}
|
||
|
case 'info': {
|
||
|
return Boolean(this.level & LOG_TYPES.INFO);
|
||
|
}
|
||
|
case 'warn': {
|
||
|
return Boolean(this.level & LOG_TYPES.WARN);
|
||
|
}
|
||
|
case 'error': {
|
||
|
return Boolean(this.level & LOG_TYPES.ERROR);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
static from(type) {
|
||
|
switch (type) {
|
||
|
case 'debug': {
|
||
|
return new LogLevel(LOG_TYPES.DEBUG | LOG_TYPES.INFO | LOG_TYPES.WARN | LOG_TYPES.ERROR);
|
||
|
}
|
||
|
case 'info': {
|
||
|
return new LogLevel(LOG_TYPES.INFO | LOG_TYPES.WARN | LOG_TYPES.ERROR);
|
||
|
}
|
||
|
case 'warn': {
|
||
|
return new LogLevel(LOG_TYPES.WARN | LOG_TYPES.ERROR);
|
||
|
}
|
||
|
case 'error': {
|
||
|
return new LogLevel(LOG_TYPES.ERROR);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const delay = (ms) => new Promise((resolve) => setTimeout(() => resolve(), ms));
|
||
|
|
||
|
class Timeout {
|
||
|
constructor(millisecond) {
|
||
|
this.abortController = new ponyfills.AbortController();
|
||
|
this.timeout = setTimeout(() => {
|
||
|
this.abortController.abort();
|
||
|
}, millisecond);
|
||
|
}
|
||
|
get signal() {
|
||
|
return this.abortController.signal;
|
||
|
}
|
||
|
clear() {
|
||
|
clearTimeout(this.timeout);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const mergeAbortSignals = (signals) => {
|
||
|
const abortController = new ponyfills.AbortController();
|
||
|
for (const signal of signals) {
|
||
|
signal.addEventListener('abort', () => abortController.abort());
|
||
|
}
|
||
|
return abortController.signal;
|
||
|
};
|
||
|
|
||
|
/* eslint-disable unicorn/no-array-for-each */
|
||
|
const mergeHeadersInit = ([head, ...tail]) => {
|
||
|
const headers = new ponyfills.Headers(head);
|
||
|
for (const entry of tail) {
|
||
|
new ponyfills.Headers(entry).forEach((value, key) => {
|
||
|
headers.set(key, value);
|
||
|
});
|
||
|
}
|
||
|
return headers;
|
||
|
};
|
||
|
|
||
|
const DEFAULT_TIMEOUT_MS = 1000 * 300;
|
||
|
class MastoConfig {
|
||
|
constructor(props, serializer) {
|
||
|
this.props = props;
|
||
|
this.serializer = serializer;
|
||
|
}
|
||
|
createHeader(override = {}) {
|
||
|
var _a, _b;
|
||
|
const headersInit = mergeHeadersInit([
|
||
|
(_b = (_a = this.props.defaultRequestInit) === null || _a === void 0 ? void 0 : _a.headers) !== null && _b !== void 0 ? _b : {},
|
||
|
{ 'Content-Type': 'application/json' },
|
||
|
override,
|
||
|
]);
|
||
|
const headers = new ponyfills.Headers(headersInit);
|
||
|
if (this.props.accessToken) {
|
||
|
headers.set('Authorization', `Bearer ${this.props.accessToken}`);
|
||
|
}
|
||
|
return new ponyfills.Headers(headers);
|
||
|
}
|
||
|
createWebsocketProtocols(protocols = []) {
|
||
|
return this.supportsSecureToken() && this.props.accessToken != undefined
|
||
|
? [this.props.accessToken, ...protocols]
|
||
|
: protocols;
|
||
|
}
|
||
|
resolveHttpPath(path, params) {
|
||
|
const url = new URL(path, this.props.url);
|
||
|
if (params) {
|
||
|
url.search = this.serializer.serializeQueryString(params);
|
||
|
}
|
||
|
return url;
|
||
|
}
|
||
|
resolveWebsocketPath(path, params = {}) {
|
||
|
if (this.props.streamingApiUrl == undefined) {
|
||
|
throw new MastoInvalidArgumentError('You need to specify `streamingApiUrl` to use this feature');
|
||
|
}
|
||
|
const url = new URL(this.props.streamingApiUrl.replace(/\/$/, '') + path);
|
||
|
if (!this.supportsSecureToken()) {
|
||
|
params.accessToken = this.props.accessToken;
|
||
|
}
|
||
|
url.search = this.serializer.serializeQueryString(params);
|
||
|
return url.toString();
|
||
|
}
|
||
|
createTimeout() {
|
||
|
var _a;
|
||
|
return new Timeout((_a = this.props.timeout) !== null && _a !== void 0 ? _a : DEFAULT_TIMEOUT_MS);
|
||
|
}
|
||
|
createAbortSignal(signal) {
|
||
|
var _a;
|
||
|
const timeout = this.createTimeout();
|
||
|
const signals = [timeout.signal];
|
||
|
if ((_a = this.props.defaultRequestInit) === null || _a === void 0 ? void 0 : _a.signal) {
|
||
|
// FIXME: `abort-controller` and `node-fetch` mismatches
|
||
|
signals.push(this.props.defaultRequestInit.signal);
|
||
|
}
|
||
|
if (signal != undefined) {
|
||
|
signals.push(signal);
|
||
|
}
|
||
|
return [mergeAbortSignals(signals), timeout];
|
||
|
}
|
||
|
getLogLevel() {
|
||
|
var _a;
|
||
|
return LogLevel.from((_a = this.props.logLevel) !== null && _a !== void 0 ? _a : 'warn');
|
||
|
}
|
||
|
shouldWarnDeprecated() {
|
||
|
return !this.props.disableDeprecatedWarning;
|
||
|
}
|
||
|
satisfiesVersion(since, until) {
|
||
|
var _a;
|
||
|
if (this.props.version == undefined || this.props.disableVersionCheck) {
|
||
|
return {
|
||
|
compat: 'compatible',
|
||
|
version: (_a = this.props.version) === null || _a === void 0 ? void 0 : _a.version,
|
||
|
};
|
||
|
}
|
||
|
if (since && semver.lt(this.props.version, since)) {
|
||
|
return {
|
||
|
compat: 'unimplemented',
|
||
|
version: this.props.version.version,
|
||
|
};
|
||
|
}
|
||
|
if (until && semver.gt(this.props.version, until)) {
|
||
|
return {
|
||
|
compat: 'removed',
|
||
|
version: this.props.version.version,
|
||
|
};
|
||
|
}
|
||
|
return {
|
||
|
compat: 'compatible',
|
||
|
version: this.props.version.version,
|
||
|
};
|
||
|
}
|
||
|
supportsSecureToken() {
|
||
|
var _a;
|
||
|
if (this.props.version == undefined || this.props.disableVersionCheck) {
|
||
|
return true;
|
||
|
}
|
||
|
// Since v2.8.4, it is supported to pass access token with`Sec-Websocket-Protocol`
|
||
|
// https://github.com/tootsuite/mastodon/pull/10818
|
||
|
return (((_a = this.props.streamingApiUrl) === null || _a === void 0 ? void 0 : _a.startsWith('wss:')) &&
|
||
|
semver.gte(this.props.version, new semver.SemVer('2.8.4', { loose: true })));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class BaseHttp {
|
||
|
get(path, data, init = {}) {
|
||
|
return this.request({
|
||
|
path,
|
||
|
searchParams: data,
|
||
|
requestInit: Object.assign({ method: 'GET' }, init),
|
||
|
}).then((response) => response.data);
|
||
|
}
|
||
|
post(path, data, init = {}) {
|
||
|
return this.request({
|
||
|
path,
|
||
|
body: data,
|
||
|
requestInit: Object.assign({ method: 'POST' }, init),
|
||
|
}).then((response) => response.data);
|
||
|
}
|
||
|
delete(path, data, init = {}) {
|
||
|
return this.request({
|
||
|
path,
|
||
|
body: data,
|
||
|
requestInit: Object.assign({ method: 'DELETE' }, init),
|
||
|
}).then((response) => response.data);
|
||
|
}
|
||
|
put(path, data, init = {}) {
|
||
|
return this.request({
|
||
|
path,
|
||
|
body: data,
|
||
|
requestInit: Object.assign({ method: 'PUT' }, init),
|
||
|
}).then((response) => response.data);
|
||
|
}
|
||
|
patch(path, data, init = {}) {
|
||
|
return this.request({
|
||
|
path,
|
||
|
body: data,
|
||
|
requestInit: Object.assign({ method: 'PATCH' }, init),
|
||
|
}).then((response) => response.data);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/******************************************************************************
|
||
|
Copyright (c) Microsoft Corporation.
|
||
|
|
||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||
|
purpose with or without fee is hereby granted.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||
|
PERFORMANCE OF THIS SOFTWARE.
|
||
|
***************************************************************************** */
|
||
|
|
||
|
function __decorate(decorators, target, key, desc) {
|
||
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
||
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||
|
}
|
||
|
|
||
|
function __awaiter(thisArg, _arguments, P, generator) {
|
||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||
|
});
|
||
|
}
|
||
|
|
||
|
const getContentType = (headers) => {
|
||
|
const contentType = headers.get('Content-Type');
|
||
|
if (typeof contentType !== 'string') {
|
||
|
return;
|
||
|
}
|
||
|
return contentType.replace(/\s*;.*$/, '');
|
||
|
};
|
||
|
|
||
|
class HttpNativeImpl extends BaseHttp {
|
||
|
constructor(serializer, config, logger) {
|
||
|
super();
|
||
|
this.serializer = serializer;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
request(params) {
|
||
|
var _a, _b, _c, _d, _e;
|
||
|
return __awaiter(this, void 0, void 0, function* () {
|
||
|
const [request, timeout] = this.createRequest(params);
|
||
|
try {
|
||
|
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.info(`↑ ${request.method} ${request.url}`);
|
||
|
(_b = this.logger) === null || _b === void 0 ? void 0 : _b.debug('\tbody', request.body);
|
||
|
const response = yield ponyfills.fetch(request);
|
||
|
timeout.clear();
|
||
|
if (!response.ok) {
|
||
|
throw response;
|
||
|
}
|
||
|
const text = yield response.text();
|
||
|
const contentType = getContentType(response.headers);
|
||
|
if (contentType == undefined) {
|
||
|
throw new MastoUnexpectedError('Content-Type is not defined');
|
||
|
}
|
||
|
const data = this.serializer.deserialize(contentType, text);
|
||
|
(_c = this.logger) === null || _c === void 0 ? void 0 : _c.info(`↓ ${request.method} ${request.url}`);
|
||
|
(_d = this.logger) === null || _d === void 0 ? void 0 : _d.debug('\tbody', text);
|
||
|
return {
|
||
|
headers: response.headers,
|
||
|
data,
|
||
|
};
|
||
|
}
|
||
|
catch (error) {
|
||
|
(_e = this.logger) === null || _e === void 0 ? void 0 : _e.debug(`HTTP failed`, error);
|
||
|
throw yield this.createError(error);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
createRequest(params) {
|
||
|
var _a;
|
||
|
const { path, searchParams, requestInit } = params;
|
||
|
const url = this.config.resolveHttpPath(path, searchParams);
|
||
|
const headers = this.config.createHeader(requestInit === null || requestInit === void 0 ? void 0 : requestInit.headers);
|
||
|
const [abortSignal, timeout] = this.config.createAbortSignal(requestInit === null || requestInit === void 0 ? void 0 : requestInit.signal);
|
||
|
const body = this.serializer.serialize((_a = getContentType(headers)) !== null && _a !== void 0 ? _a : 'application/json', params.body);
|
||
|
if (body instanceof ponyfills.FormData) {
|
||
|
// As multipart form data should contain an arbitrary boundary,
|
||
|
// leave Content-Type header undefined, so that fetch() API
|
||
|
// automatically configure Content-Type with an appropriate boundary.
|
||
|
headers.delete('Content-Type');
|
||
|
}
|
||
|
if (body == undefined && getContentType(headers) == 'application/json') {
|
||
|
// Since an empty string is not a valid JSON,
|
||
|
// if the body is empty and the content type is set to JSON,
|
||
|
// remove 'content-type:application/json' from headers
|
||
|
headers.delete('Content-Type');
|
||
|
}
|
||
|
const request = new ponyfills.Request(url, Object.assign(Object.assign({}, requestInit), { headers,
|
||
|
body, signal: abortSignal }));
|
||
|
return [request, timeout];
|
||
|
}
|
||
|
createError(error) {
|
||
|
var _a;
|
||
|
return __awaiter(this, void 0, void 0, function* () {
|
||
|
if (error instanceof ponyfills.Response) {
|
||
|
const data = this.serializer.deserialize((_a = getContentType(error.headers)) !== null && _a !== void 0 ? _a : 'application/json', yield error.text());
|
||
|
return createHttpError({
|
||
|
cause: error,
|
||
|
statusCode: error.status,
|
||
|
message: data === null || data === void 0 ? void 0 : data.error,
|
||
|
details: data === null || data === void 0 ? void 0 : data.errorDescription,
|
||
|
description: data === null || data === void 0 ? void 0 : data.details,
|
||
|
limit: error.headers.get('X-RateLimit-Limit'),
|
||
|
remaining: error.headers.get('X-RateLimit-Remaining'),
|
||
|
reset: error.headers.get('X-RateLimit-Reset'),
|
||
|
});
|
||
|
}
|
||
|
// TODO: Use abort reason
|
||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||
|
if (error != undefined && error.name === 'AbortError') {
|
||
|
return new MastoTimeoutError(`Request timed out`, { cause: error });
|
||
|
}
|
||
|
return error;
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var index$4 = /*#__PURE__*/Object.freeze({
|
||
|
__proto__: null
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* Decorator that verifies the version of the Mastodon instance
|
||
|
* @param parameters Optional params
|
||
|
*/
|
||
|
const version = (params) => (_target, name, descriptor) => {
|
||
|
const origin = descriptor.value;
|
||
|
if (!origin) {
|
||
|
throw new MastoUnexpectedError('version can only apply to a method of a class');
|
||
|
}
|
||
|
descriptor.value = function (...args) {
|
||
|
const since = params.since && new semver.SemVer(params.since, { loose: true });
|
||
|
const until = params.until && new semver.SemVer(params.until, { loose: true });
|
||
|
const result = this.config.satisfiesVersion(since, until);
|
||
|
switch (result.compat) {
|
||
|
case 'unimplemented': {
|
||
|
throw new MastoVersionError(`${String(this.constructor.name)}.${String(name)}` +
|
||
|
` is not available with the current Mastodon version ` +
|
||
|
result.version +
|
||
|
` It requires greater than or equal to version ${since}.`);
|
||
|
}
|
||
|
case 'removed': {
|
||
|
throw new MastoVersionError(`${String(this.constructor.name)}.${String(name)}` +
|
||
|
` is not available with the current Mastodon version` +
|
||
|
result.version +
|
||
|
` It was removed on version ${until}.`);
|
||
|
}
|
||
|
case 'compatible': {
|
||
|
return origin.apply(this, args);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
class Paginator {
|
||
|
constructor(http, nextPath, nextParams) {
|
||
|
this.http = http;
|
||
|
this.nextPath = nextPath;
|
||
|
this.nextParams = nextParams;
|
||
|
this.pluckNext = (link) => {
|
||
|
var _a;
|
||
|
if (link == undefined) {
|
||
|
return undefined;
|
||
|
}
|
||
|
const path = (_a = link
|
||
|
.match(/<(.+?)>; rel="next"/)) === null || _a === void 0 ? void 0 : _a[1].replace(/^https?:\/\/[^/]+/, '');
|
||
|
return path;
|
||
|
};
|
||
|
}
|
||
|
next() {
|
||
|
var _a, _b;
|
||
|
return __awaiter(this, void 0, void 0, function* () {
|
||
|
if (this.nextPath == undefined) {
|
||
|
return { done: true, value: undefined };
|
||
|
}
|
||
|
const response = yield this.http.request({
|
||
|
requestInit: { method: 'GET' },
|
||
|
path: this.nextPath,
|
||
|
searchParams: this.nextParams,
|
||
|
});
|
||
|
const next = (_a = this.pluckNext(response.headers.get('link'))) === null || _a === void 0 ? void 0 : _a.split('?');
|
||
|
this.nextPath = next === null || next === void 0 ? void 0 : next[0];
|
||
|
this.nextParams = qs.parse((_b = next === null || next === void 0 ? void 0 : next[1]) !== null && _b !== void 0 ? _b : '');
|
||
|
return {
|
||
|
done: false,
|
||
|
value: response.data,
|
||
|
};
|
||
|
});
|
||
|
}
|
||
|
return(value) {
|
||
|
return __awaiter(this, void 0, void 0, function* () {
|
||
|
this.clear();
|
||
|
return {
|
||
|
done: true,
|
||
|
value: yield value,
|
||
|
};
|
||
|
});
|
||
|
}
|
||
|
throw(e) {
|
||
|
return __awaiter(this, void 0, void 0, function* () {
|
||
|
this.clear();
|
||
|
throw e;
|
||
|
});
|
||
|
}
|
||
|
then(onfulfilled = Promise.resolve, onrejected = Promise.reject) {
|
||
|
// we assume the first item won't be undefined
|
||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||
|
return this.next().then((value) => onfulfilled(value.value), onrejected);
|
||
|
}
|
||
|
[Symbol.asyncIterator]() {
|
||
|
return this;
|
||
|
}
|
||
|
clear() {
|
||
|
this.nextPath = undefined;
|
||
|
this.nextParams = undefined;
|
||
|
}
|
||
|
clone() {
|
||
|
return new Paginator(this.http, this.nextPath, this.nextParams);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// implements Repository<Account, CreateAccountParams>
|
||
|
let AccountRepository$1 = class AccountRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View information about a profile.
|
||
|
* @param id The id of the account in the database
|
||
|
* @return Account
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/accounts/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Creates a user and account records. Returns an account access token
|
||
|
* for the app that initiated the request. The app should save this token for later,
|
||
|
* and should wait for the user to confirm their account by clicking a link in their email inbox.
|
||
|
* @param params Parameters
|
||
|
* @return Token
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/#create
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post(`/api/v1/accounts`, params, {
|
||
|
headers: { 'Content-Type': 'multipart/form-data' },
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Test to make sure that the user token works.
|
||
|
* @return the user's own Account with Source
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
verifyCredentials() {
|
||
|
return this.http.get('/api/v1/accounts/verify_credentials');
|
||
|
}
|
||
|
/**
|
||
|
* Update the user's display and preferences.
|
||
|
* @param params Parameters
|
||
|
* @return the user's own Account with Source
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
updateCredentials(params) {
|
||
|
return this.http.patch('/api/v1/accounts/update_credentials', params, {
|
||
|
headers: { 'Content-Type': 'multipart/form-data' },
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Accounts which follow the given account, if network is not hidden by the account owner.
|
||
|
* @param id The id of the account in the database
|
||
|
* @param params Parameters
|
||
|
* @return Array of Account
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
listFollowers(id, params = {}) {
|
||
|
return new Paginator(this.http, `/api/v1/accounts/${id}/followers`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Accounts which the given account is following, if network is not hidden by the account owner.
|
||
|
* @param id The id of the account in the database
|
||
|
* @param params Parameters
|
||
|
* @return Array of Account
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
listFollowing(id, params = {}) {
|
||
|
return new Paginator(this.http, `/api/v1/accounts/${id}/following`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Statuses posted to the given account.
|
||
|
* @param id The id of the account in the database
|
||
|
* @param params Parameters
|
||
|
* @return Array of Status
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
listStatuses(id, params = {}) {
|
||
|
return new Paginator(this.http, `/api/v1/accounts/${id}/statuses`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Follow the given account.
|
||
|
* @param id The id of the account in the database
|
||
|
* @param params Parameters
|
||
|
* @return Relationship
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
follow(id, params) {
|
||
|
return this.http.post(`/api/v1/accounts/${id}/follow`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Unfollow the given account
|
||
|
* @param id The id of the account in the database
|
||
|
* @return Relationship
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
unfollow(id, params) {
|
||
|
return this.http.post(`/api/v1/accounts/${id}/unfollow`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Find out whether a given account is followed, blocked, muted, etc.
|
||
|
* @param id Array of account IDs to check
|
||
|
* @return Array of Relationship
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
fetchRelationships(id) {
|
||
|
return this.http.get('/api/v1/accounts/relationships', {
|
||
|
id,
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Search for matching accounts by username or display name.
|
||
|
* @param params Parameters
|
||
|
* @return Array of Account
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
search(params) {
|
||
|
return new Paginator(this.http, `/api/v1/accounts/search`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Block the given account. Clients should filter statuses from this account if received (e.g. due to a boost in the Home timeline)
|
||
|
* @param id The id of the account in the database
|
||
|
* @return Relationship
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
block(id) {
|
||
|
return this.http.post(`/api/v1/accounts/${id}/block`);
|
||
|
}
|
||
|
/**
|
||
|
* Unblock the given account.
|
||
|
* @param id The id of the account in the database
|
||
|
* @return Relationship
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
unblock(id) {
|
||
|
return this.http.post(`/api/v1/accounts/${id}/unblock`);
|
||
|
}
|
||
|
/**
|
||
|
* Add the given account to the user's featured profiles. (Featured profiles are currently shown on the user's own public profile.)
|
||
|
* @param id The id of the account in the database
|
||
|
* @return Relationship
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
pin(id) {
|
||
|
return this.http.post(`/api/v1/accounts/${id}/pin`);
|
||
|
}
|
||
|
/**
|
||
|
* Remove the given account from the user's featured profiles.
|
||
|
* @param id The id of the account in the database
|
||
|
* @return Relationship
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
unpin(id) {
|
||
|
return this.http.post(`/api/v1/accounts/${id}/unpin`);
|
||
|
}
|
||
|
/**
|
||
|
* Fetch the list with the given ID. Used for verifying the title of a list.
|
||
|
* @param id ID of the list in the database
|
||
|
* @return Array of List
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/lists/
|
||
|
*/
|
||
|
listLists(id) {
|
||
|
return new Paginator(this.http, `/api/v1/accounts/${id}/lists`);
|
||
|
}
|
||
|
/**
|
||
|
* Mute the given account. Clients should filter statuses and notifications from this account, if received (e.g. due to a boost in the Home timeline).
|
||
|
* @param id The id of the account in the database
|
||
|
* @param params Parameter
|
||
|
* @return Relationship
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
mute(id, params) {
|
||
|
return this.http.post(`/api/v1/accounts/${id}/mute`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Unmute the given account.
|
||
|
* @param id The id of the account in the database
|
||
|
* @return Relationship
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/
|
||
|
*/
|
||
|
unmute(id) {
|
||
|
return this.http.post(`/api/v1/accounts/${id}/unmute`);
|
||
|
}
|
||
|
/**
|
||
|
* Add personal note to the account
|
||
|
* @param id ID of the account
|
||
|
* @param param Parameters
|
||
|
* @return Relationship
|
||
|
*/
|
||
|
createNote(id, params) {
|
||
|
return this.http.post(`/api/v1/accounts/${id}/note`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Get featured tag of the account
|
||
|
* @param id ID of the account
|
||
|
* @return FeaturedTags
|
||
|
*/
|
||
|
listFeaturedTags(id) {
|
||
|
return new Paginator(this.http, `/api/v1/accounts/${id}/featured_tags`);
|
||
|
}
|
||
|
/**
|
||
|
* Identity proofs
|
||
|
* @param id The id of the account in the database
|
||
|
* @return Array of IdentityProof
|
||
|
* @see https://github.com/tootsuite/mastodon/pull/10297
|
||
|
*/
|
||
|
listIdentityProofs(id) {
|
||
|
return new Paginator(this.http, `/api/v1/accounts/${id}/identity_proofs`);
|
||
|
}
|
||
|
/**
|
||
|
* This method allows to quickly convert a username of a known account to an ID that can be used with the REST API, or to check if a username is available for sign-up
|
||
|
* @param params Parameters
|
||
|
* @return Account
|
||
|
*/
|
||
|
lookup(params) {
|
||
|
return this.http.get('/api/v1/accounts/lookup', params);
|
||
|
}
|
||
|
/**
|
||
|
* Obtain a list of all accounts that follow a given account, filtered for accounts you follow.
|
||
|
* @returns Array of FamiliarFollowers
|
||
|
*/
|
||
|
fetchFamiliarFollowers(id) {
|
||
|
return this.http.get(`/api/v1/accounts/familiar_followers`, { id });
|
||
|
}
|
||
|
/**
|
||
|
* @param id ID of the account
|
||
|
* @returns N/A
|
||
|
*/
|
||
|
removeFromFollowers(id) {
|
||
|
return this.http.post(`/api/v1/accounts/${id}/remove_from_followers`);
|
||
|
}
|
||
|
};
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.7.0' })
|
||
|
], AccountRepository$1.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "verifyCredentials", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "updateCredentials", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "listFollowers", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "listFollowing", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "listStatuses", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "follow", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "unfollow", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "fetchRelationships", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "search", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "block", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "unblock", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.5.0' })
|
||
|
], AccountRepository$1.prototype, "pin", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.5.0' })
|
||
|
], AccountRepository$1.prototype, "unpin", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.1.0' })
|
||
|
], AccountRepository$1.prototype, "listLists", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "mute", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AccountRepository$1.prototype, "unmute", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.2.0' })
|
||
|
], AccountRepository$1.prototype, "createNote", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.3.0' })
|
||
|
], AccountRepository$1.prototype, "listFeaturedTags", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.8.0' })
|
||
|
], AccountRepository$1.prototype, "listIdentityProofs", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.4.0' })
|
||
|
], AccountRepository$1.prototype, "lookup", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.5.0' })
|
||
|
], AccountRepository$1.prototype, "fetchFamiliarFollowers", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.5.0' })
|
||
|
], AccountRepository$1.prototype, "removeFromFollowers", null);
|
||
|
|
||
|
/**
|
||
|
* Decorator that verifies the version of the Mastodon instance
|
||
|
* @param parameters Optional params
|
||
|
*/
|
||
|
const deprecated = (message) => (_target, name, descriptor) => {
|
||
|
const origin = descriptor.value;
|
||
|
if (origin == undefined) {
|
||
|
throw new MastoUnexpectedError('deprecated can only apply to a method of a class');
|
||
|
}
|
||
|
descriptor.value = function (...args) {
|
||
|
var _a, _b;
|
||
|
if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.shouldWarnDeprecated()) {
|
||
|
(_b = this.logger) === null || _b === void 0 ? void 0 : _b.warn(`#${name.toString()} is deprecated. ${message}`);
|
||
|
}
|
||
|
return origin.apply(this, args);
|
||
|
};
|
||
|
};
|
||
|
|
||
|
class StreamRepository {
|
||
|
constructor(ws, config, logger) {
|
||
|
this.ws = ws;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Starting home timeline and notification streaming
|
||
|
* @return Instance of EventEmitter
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/streaming/
|
||
|
*/
|
||
|
streamUser() {
|
||
|
return this.ws.stream('/api/v1/streaming', {
|
||
|
stream: 'user',
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Starting federated timeline streaming
|
||
|
* @return Instance of EventEmitter
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/streaming/
|
||
|
*/
|
||
|
streamPublicTimeline() {
|
||
|
return this.ws.stream('/api/v1/streaming', {
|
||
|
stream: 'public',
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Starting local timeline streaming
|
||
|
* @return Instance of EventEmitter
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/streaming/
|
||
|
*/
|
||
|
streamCommunityTimeline() {
|
||
|
return this.ws.stream('/api/v1/streaming', {
|
||
|
stream: 'public:local',
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Stream remote public timeline
|
||
|
* @return Instance of EventEmitter
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/streaming/
|
||
|
*/
|
||
|
streamRemotePublicTimeline() {
|
||
|
return this.ws.stream('/api/v1/streaming', {
|
||
|
stream: 'public:remote',
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Starting tag timeline streaming
|
||
|
* @param id ID of the tag
|
||
|
* @return Instance of EventEmitter
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/streaming/
|
||
|
*/
|
||
|
streamTagTimeline(id) {
|
||
|
return this.ws.stream('/api/v1/streaming', {
|
||
|
stream: 'hashtag',
|
||
|
tag: id,
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Starting local tag timeline streaming
|
||
|
* @param id ID of the tag
|
||
|
* @return Instance of EventEmitter
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/streaming/
|
||
|
*/
|
||
|
streamLocalTagTimeline(id) {
|
||
|
return this.ws.stream('/api/v1/streaming', {
|
||
|
stream: 'hashtag:local',
|
||
|
tag: id,
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Starting list timeline streaming
|
||
|
* @param id ID of the list
|
||
|
* @return Instance of EventEmitter
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/streaming/
|
||
|
*/
|
||
|
streamListTimeline(id) {
|
||
|
return this.ws.stream('/api/v1/streaming', {
|
||
|
stream: 'list',
|
||
|
list: id,
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Starting direct timeline streaming
|
||
|
* @return Instance of EventEmitter
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/streaming/
|
||
|
*/
|
||
|
streamDirectTimeline() {
|
||
|
return this.ws.stream('/api/v1/streaming', {
|
||
|
stream: 'direct',
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StreamRepository.prototype, "streamUser", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StreamRepository.prototype, "streamPublicTimeline", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StreamRepository.prototype, "streamCommunityTimeline", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StreamRepository.prototype, "streamRemotePublicTimeline", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StreamRepository.prototype, "streamTagTimeline", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StreamRepository.prototype, "streamLocalTagTimeline", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StreamRepository.prototype, "streamListTimeline", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StreamRepository.prototype, "streamDirectTimeline", null);
|
||
|
|
||
|
class AnnouncementRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Fetch announcements
|
||
|
* @return Announcements
|
||
|
* @see https://docs.joinmastodon.org/methods/announcements/
|
||
|
*/
|
||
|
list() {
|
||
|
return new Paginator(this.http, '/api/v1/announcements');
|
||
|
}
|
||
|
/**
|
||
|
* Dismiss announcement
|
||
|
* @param id ID of the announcement
|
||
|
* @return Nothing
|
||
|
* @see https://docs.joinmastodon.org/methods/announcements/
|
||
|
*/
|
||
|
dismiss(id) {
|
||
|
return this.http.post(`/api/v1/announcements/${id}/dismiss`);
|
||
|
}
|
||
|
/**
|
||
|
* Add a reaction to an announcement
|
||
|
* @param id ID of the announcement
|
||
|
* @param name Emoji string
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/announcements/
|
||
|
*/
|
||
|
addReaction(id, name) {
|
||
|
return this.http.put(`/api/v1/announcements/${id}/reactions/${name}`);
|
||
|
}
|
||
|
/**
|
||
|
* Remove a reaction from an announcement
|
||
|
* @param id ID of the announcement
|
||
|
* @param name Emoji string
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/announcements/
|
||
|
*/
|
||
|
removeReaction(id, name) {
|
||
|
return this.http.delete(`/api/v1/announcements/${id}/reactions/${name}`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '3.1.0' })
|
||
|
], AnnouncementRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.1.0' })
|
||
|
], AnnouncementRepository.prototype, "dismiss", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.1.0' })
|
||
|
], AnnouncementRepository.prototype, "addReaction", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.1.0' })
|
||
|
], AnnouncementRepository.prototype, "removeReaction", null);
|
||
|
|
||
|
class AppRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Create a new application to obtain OAuth2 credentials.
|
||
|
* @param params Parameters
|
||
|
* @return Returns App with `client_id` and `client_secret`
|
||
|
* @see https://docs.joinmastodon.org/methods/apps/
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post(`/api/v1/apps`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Confirm that the app's OAuth2 credentials work.
|
||
|
* @return Application
|
||
|
* @see https://docs.joinmastodon.org/methods/apps/
|
||
|
*/
|
||
|
verifyCredentials() {
|
||
|
return this.http.get(`/api/v1/apps/verify_credentials`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], AppRepository.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.0.0' })
|
||
|
], AppRepository.prototype, "verifyCredentials", null);
|
||
|
|
||
|
class BlockRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Blocked users
|
||
|
* @param params Array of Account
|
||
|
* @return Query parameter
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/blocks/
|
||
|
*/
|
||
|
list(params = {}) {
|
||
|
return new Paginator(this.http, `/api/v1/blocks`, params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], BlockRepository.prototype, "list", null);
|
||
|
|
||
|
class BookmarkRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Statuses the user has bookmarked.
|
||
|
* @param params Parameters
|
||
|
* @return Array of Statuses
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/bookmarks/
|
||
|
*/
|
||
|
list(params = {}) {
|
||
|
return new Paginator(this.http, '/api/v1/bookmarks', params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '3.1.0' })
|
||
|
], BookmarkRepository.prototype, "list", null);
|
||
|
|
||
|
class ConversationRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Show conversation
|
||
|
* @param params Parameters
|
||
|
* @return Array of Conversation
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/conversations/
|
||
|
*/
|
||
|
list(params = {}) {
|
||
|
return new Paginator(this.http, '/api/v1/conversations', params);
|
||
|
}
|
||
|
/**
|
||
|
* Remove conversation
|
||
|
* @param id ID of the conversation in the database
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/conversations/
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v1/conversations/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Mark as read
|
||
|
* @param id ID of the conversation in the database
|
||
|
* @return Conversation
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/conversations/
|
||
|
*/
|
||
|
read(id) {
|
||
|
return this.http.post(`/api/v1/conversations/${id}/read`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '2.6.0' })
|
||
|
], ConversationRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.6.0' })
|
||
|
], ConversationRepository.prototype, "remove", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.6.0' })
|
||
|
], ConversationRepository.prototype, "read", null);
|
||
|
|
||
|
class CustomEmojiRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Returns custom emojis that are available on the server.
|
||
|
* @return Array of Emoji
|
||
|
* @see https://docs.joinmastodon.org/methods/instance/custom_emojis/
|
||
|
*/
|
||
|
list() {
|
||
|
return new Paginator(this.http, `/api/v1/custom_emojis`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '2.0.0' })
|
||
|
], CustomEmojiRepository.prototype, "list", null);
|
||
|
|
||
|
class DirectoryRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* List accounts visible in the directory.
|
||
|
* @param params Parameters
|
||
|
* @return Array of Account
|
||
|
* @see https://docs.joinmastodon.org/methods/instance/directory/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/directory', params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '3.0.0' })
|
||
|
], DirectoryRepository.prototype, "list", null);
|
||
|
|
||
|
let DomainBlockRepository$1 = class DomainBlockRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View domains the user has blocked.
|
||
|
* @param params Parameters
|
||
|
* @return Array of strings
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/domain_blocks/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, `/api/v1/domain_blocks`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Block a domain to:
|
||
|
* - hide all public posts from it
|
||
|
* - hide all notifications from it
|
||
|
* - remove all followers from it
|
||
|
* - prevent following new users from it (but does not remove existing follows)
|
||
|
* @param domain Domain to block.
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/domain_blocks/
|
||
|
*/
|
||
|
block(domain) {
|
||
|
return this.http.post(`/api/v1/domain_blocks`, {
|
||
|
domain,
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Remove a domain block, if it exists in the user's array of blocked domains.
|
||
|
* @param domain Domain to unblock
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/domain_blocks/
|
||
|
*/
|
||
|
unblock(domain) {
|
||
|
return this.http.delete(`/api/v1/domain_blocks`, {
|
||
|
domain,
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
__decorate([
|
||
|
version({ since: '1.4.0' })
|
||
|
], DomainBlockRepository$1.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '1.4.0' })
|
||
|
], DomainBlockRepository$1.prototype, "block", null);
|
||
|
__decorate([
|
||
|
version({ since: '1.4.0' })
|
||
|
], DomainBlockRepository$1.prototype, "unblock", null);
|
||
|
|
||
|
class EndorsementRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Accounts that the user is currently featuring on their profile.
|
||
|
* @return Array of Account
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/endorsements/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, `/api/v1/endorsements`, params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '2.5.0' })
|
||
|
], EndorsementRepository.prototype, "list", null);
|
||
|
|
||
|
class FavouriteRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Statuses the user has favourited.
|
||
|
* @param params Parameters
|
||
|
* @return Array of Status
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/favourites/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, `/api/v1/favourites`, params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], FavouriteRepository.prototype, "list", null);
|
||
|
|
||
|
class FeaturedTagRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View your featured tags
|
||
|
* @return Array of FeaturedTag
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/featured_tags/
|
||
|
* @done
|
||
|
*/
|
||
|
list() {
|
||
|
return new Paginator(this.http, '/api/v1/featured_tags');
|
||
|
}
|
||
|
/**
|
||
|
* Feature a tag
|
||
|
* @param params Parameters
|
||
|
* @return FeaturedTag
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/featured_tags/
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post('/api/v1/featured_tags', params);
|
||
|
}
|
||
|
/**
|
||
|
* Shows your 10 most-used tags, with usage history for the past week.
|
||
|
* @return Array of Tag with History
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/featured_tags/
|
||
|
*/
|
||
|
listSuggestions() {
|
||
|
return new Paginator(this.http, '/api/v1/featured_tags/suggestions');
|
||
|
}
|
||
|
/**
|
||
|
* Un-feature a tag
|
||
|
* @param id The id of the FeaturedTag to be un-featured
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/featured_tags/
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v1/featured_tags/${id}`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '3.0.0' })
|
||
|
], FeaturedTagRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.0.0' })
|
||
|
], FeaturedTagRepository.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.0.0' })
|
||
|
], FeaturedTagRepository.prototype, "listSuggestions", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.0.0' })
|
||
|
], FeaturedTagRepository.prototype, "remove", null);
|
||
|
|
||
|
let FilterRepository$1 = class FilterRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View all filters
|
||
|
* @return Filter
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/filters/
|
||
|
*/
|
||
|
list() {
|
||
|
return new Paginator(this.http, `/api/v1/filters`);
|
||
|
}
|
||
|
/**
|
||
|
* View a single filter
|
||
|
* @param id ID of the filter
|
||
|
* @return Returns Filter
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/filters/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/filters/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Create a filter
|
||
|
* @param params Parameters
|
||
|
* @return Filter
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/filters/
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post(`/api/v1/filters`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Update a filter
|
||
|
* @param id ID of the filter in the database
|
||
|
* @param params Parameters
|
||
|
* @return Filter
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/filters/
|
||
|
*/
|
||
|
update(id, params) {
|
||
|
return this.http.put(`/api/v1/filters/${id}`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Remove a filter
|
||
|
* @param id ID of the filter in the database
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/filters/
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v1/filters/${id}`);
|
||
|
}
|
||
|
};
|
||
|
__decorate([
|
||
|
version({ since: '2.4.3' })
|
||
|
], FilterRepository$1.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.4.3' })
|
||
|
], FilterRepository$1.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.4.3' })
|
||
|
], FilterRepository$1.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.4.3' })
|
||
|
], FilterRepository$1.prototype, "update", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.4.3' })
|
||
|
], FilterRepository$1.prototype, "remove", null);
|
||
|
|
||
|
class FollowRequestRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Pending Follows
|
||
|
* @param params Parameters
|
||
|
* @return Array of Account
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/follow_requests/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, `/api/v1/follow_requests`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Accept Follow
|
||
|
* @param id ID of the account in the database
|
||
|
* @return Relationship
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/follow_requests/
|
||
|
*/
|
||
|
authorize(id) {
|
||
|
return this.http.post(`/api/v1/follow_requests/${id}/authorize`);
|
||
|
}
|
||
|
/**
|
||
|
* Reject Follow
|
||
|
* @param id ID of the account in the database
|
||
|
* @return Relationship
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/follow_requests/
|
||
|
*/
|
||
|
reject(id) {
|
||
|
return this.http.post(`/api/v1/follow_requests/${id}/reject`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], FollowRequestRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], FollowRequestRepository.prototype, "authorize", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], FollowRequestRepository.prototype, "reject", null);
|
||
|
|
||
|
let InstanceRepository$1 = class InstanceRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Information about the server.
|
||
|
* @return Instance
|
||
|
* @see https://docs.joinmastodon.org/methods/instance/
|
||
|
*/
|
||
|
fetch() {
|
||
|
return this.http.get('/api/v1/instance');
|
||
|
}
|
||
|
/**
|
||
|
* Domains that this instance is aware of.
|
||
|
* @return Array of Activity
|
||
|
* @see https://docs.joinmastodon.org/methods/instance/
|
||
|
*/
|
||
|
listPeers() {
|
||
|
return new Paginator(this.http, '/api/v1/instance/peers');
|
||
|
}
|
||
|
/**
|
||
|
* Instance activity over the last 3 months, binned weekly.
|
||
|
* @return Array of Activity
|
||
|
* @see https://docs.joinmastodon.org/methods/instance/
|
||
|
*/
|
||
|
listActivities() {
|
||
|
return new Paginator(this.http, '/api/v1/instance/activity');
|
||
|
}
|
||
|
};
|
||
|
__decorate([
|
||
|
version({ since: '1.0.0' })
|
||
|
], InstanceRepository$1.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.1.2' })
|
||
|
], InstanceRepository$1.prototype, "listPeers", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.1.2' })
|
||
|
], InstanceRepository$1.prototype, "listActivities", null);
|
||
|
|
||
|
class ListRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Fetch the list with the given ID. Used for verifying the title of a list.
|
||
|
* @param id ID of the list in the database
|
||
|
* @return List
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/lists/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/lists/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Fetch all lists that the user owns.
|
||
|
* @return Array of List
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/lists/
|
||
|
*/
|
||
|
list() {
|
||
|
return new Paginator(this.http, '/api/v1/lists');
|
||
|
}
|
||
|
/**
|
||
|
* Create a new list.
|
||
|
* @param params Parameters
|
||
|
* @return List
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/lists/
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post('/api/v1/lists', params);
|
||
|
}
|
||
|
/**
|
||
|
* Change the title of a list.
|
||
|
* @param id ID of the list in the database
|
||
|
* @param params Parameters
|
||
|
* @return List
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/lists/
|
||
|
*/
|
||
|
update(id, params) {
|
||
|
return this.http.put(`/api/v1/lists/${id}`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Delete a list
|
||
|
* @param id ID of the list in the database
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/lists/
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v1/lists/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* View accounts in list
|
||
|
* @param id ID of the list in the database
|
||
|
* @param params Parameters
|
||
|
* @return Array of Account
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/lists/
|
||
|
*/
|
||
|
listAccounts(id, params) {
|
||
|
return new Paginator(this.http, `/api/v1/lists/${id}/accounts`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Add accounts to the given list. Note that the user must be following these accounts.
|
||
|
* @param id ID of the list in the database
|
||
|
* @param params Parameters
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/lists/
|
||
|
*/
|
||
|
addAccount(id, params) {
|
||
|
return this.http.post(`/api/v1/lists/${id}/accounts`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Remove accounts from the given list.
|
||
|
* @param id ID of the list in the database
|
||
|
* @param params Parameters
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/lists/
|
||
|
*/
|
||
|
removeAccount(id, params) {
|
||
|
return this.http.delete(`/api/v1/lists/${id}/accounts`, params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '2.1.0' })
|
||
|
], ListRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.1.0' })
|
||
|
], ListRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.1.0' })
|
||
|
], ListRepository.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.1.0' })
|
||
|
], ListRepository.prototype, "update", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.1.0' })
|
||
|
], ListRepository.prototype, "remove", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.1.0' })
|
||
|
], ListRepository.prototype, "listAccounts", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.1.0' })
|
||
|
], ListRepository.prototype, "addAccount", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.1.0' })
|
||
|
], ListRepository.prototype, "removeAccount", null);
|
||
|
|
||
|
class MarkerRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Get saved timeline position
|
||
|
* @param params Parameters
|
||
|
* @return Markers
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/markers/
|
||
|
*/
|
||
|
fetch(params) {
|
||
|
return this.http.get('/api/v1/markers', params);
|
||
|
}
|
||
|
/**
|
||
|
* Save position in timeline
|
||
|
* @param params Parameters
|
||
|
* @return Markers
|
||
|
* @see https://github.com/tootsuite/mastodon/pull/11762
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post('/api/v1/markers', params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '3.0.0' })
|
||
|
], MarkerRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.0.0' })
|
||
|
], MarkerRepository.prototype, "create", null);
|
||
|
|
||
|
let MediaAttachmentRepository$1 = class MediaAttachmentRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Creates an attachment to be used with a new status.
|
||
|
* @param params Parameters
|
||
|
* @return Attachment
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/media/
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post(`/api/v1/media`, params, {
|
||
|
headers: { 'Content-Type': 'multipart/form-data' },
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Fetches an attachment to be used with a new status.
|
||
|
* @param id ID of the attachment
|
||
|
* @see https://github.com/tootsuite/mastodon/pull/13210
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/media/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Update an Attachment, before it is attached to a status and posted.
|
||
|
* @param id The id of the Attachment entity to be updated
|
||
|
* @param params Parameters
|
||
|
* @return Attachment
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/media/
|
||
|
*/
|
||
|
update(id, params) {
|
||
|
return this.http.put(`/api/v1/media/${id}`, params, {
|
||
|
headers: { 'Content-Type': 'multipart/form-data' },
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
__decorate([
|
||
|
deprecated('Use MastoClient.v2.media.create instead'),
|
||
|
version({ since: '0.0.0', until: '3.1.3' })
|
||
|
], MediaAttachmentRepository$1.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.1.3' })
|
||
|
], MediaAttachmentRepository$1.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], MediaAttachmentRepository$1.prototype, "update", null);
|
||
|
|
||
|
class MuteRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Accounts the user has muted.
|
||
|
* @param params Parameters
|
||
|
* @return Array of Account
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/mutes/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/mutes', params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], MuteRepository.prototype, "list", null);
|
||
|
|
||
|
class NotificationRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Notifications concerning the user.
|
||
|
* This API returns Link headers containing links to the next/previous page.
|
||
|
* However, the links can also be constructed dynamically using query params and `id` values.
|
||
|
* @param params Query parameter
|
||
|
* @return Array of Notification
|
||
|
* @see https://docs.joinmastodon.org/methods/notifications/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/notifications', params);
|
||
|
}
|
||
|
/**
|
||
|
* View information about a notification with a given ID.
|
||
|
* @param id ID of the notification in the database.
|
||
|
* @return Notification
|
||
|
* @see https://docs.joinmastodon.org/methods/notifications/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/notifications/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Clear all notifications from the server.
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/notifications/
|
||
|
*/
|
||
|
clear() {
|
||
|
return this.http.post('/api/v1/notifications/clear');
|
||
|
}
|
||
|
/**
|
||
|
* Clear a single notification from the server.
|
||
|
* @param id ID of the notification to be cleared
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/notifications/
|
||
|
*/
|
||
|
dismiss(id) {
|
||
|
return this.http.post(`/api/v1/notifications/${id}/dismiss`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], NotificationRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], NotificationRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], NotificationRepository.prototype, "clear", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.6.0' })
|
||
|
], NotificationRepository.prototype, "dismiss", null);
|
||
|
|
||
|
class PollRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View a poll
|
||
|
* @param id ID of the poll in the database
|
||
|
* @return Poll
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/polls/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/polls/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Vote on a poll
|
||
|
* @param id ID of the poll in the database
|
||
|
* @param params Parameters
|
||
|
* @return Poll
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/polls/
|
||
|
*/
|
||
|
vote(id, params) {
|
||
|
return this.http.post(`/api/v1/polls/${id}/votes`, params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '2.8.0' })
|
||
|
], PollRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.8.0' })
|
||
|
], PollRepository.prototype, "vote", null);
|
||
|
|
||
|
class PreferenceRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Preferences defined by the user in their account settings.
|
||
|
* @return Preferences by key and value
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/preferences/
|
||
|
*/
|
||
|
fetch() {
|
||
|
return this.http.get('/api/v1/preferences');
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '2.8.0' })
|
||
|
], PreferenceRepository.prototype, "fetch", null);
|
||
|
|
||
|
class WebPushSubscriptionRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Add a Web Push API subscription to receive notifications.
|
||
|
* Each access token can have one push subscription.
|
||
|
* If you create a new subscription, the old subscription is deleted.
|
||
|
* @param params Parameters
|
||
|
* @return Returns Push Subscription
|
||
|
* @see https://docs.joinmastodon.org/methods/notifications/push/
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post('/api/v1/push/subscription', params);
|
||
|
}
|
||
|
/**
|
||
|
* View the PushSubscription currently associated with this access token.
|
||
|
* @return PushSubscription
|
||
|
* @see https://docs.joinmastodon.org/methods/notifications/push/
|
||
|
*/
|
||
|
fetch() {
|
||
|
return this.http.get('/api/v1/push/subscription');
|
||
|
}
|
||
|
/**
|
||
|
* Updates the current push subscription. Only the data part can be updated. To change fundamentals, a new subscription must be created instead.
|
||
|
* @param params Parameters
|
||
|
* @return PushSubscription
|
||
|
* @see https://docs.joinmastodon.org/methods/notifications/push/
|
||
|
*/
|
||
|
update(params) {
|
||
|
return this.http.put('/api/v1/push/subscription', params);
|
||
|
}
|
||
|
/**
|
||
|
* Removes the current Web Push API subscription.
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/notifications/push/
|
||
|
*/
|
||
|
remove() {
|
||
|
return this.http.delete('/api/v1/push/subscription');
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '2.4.0' })
|
||
|
], WebPushSubscriptionRepository.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.4.0' })
|
||
|
], WebPushSubscriptionRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.4.0' })
|
||
|
], WebPushSubscriptionRepository.prototype, "update", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.4.0' })
|
||
|
], WebPushSubscriptionRepository.prototype, "remove", null);
|
||
|
|
||
|
let ReportRepository$1 = class ReportRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* File a report
|
||
|
* @param params Parameters
|
||
|
* @return Report
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/reports/
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post('/api/v1/reports', params);
|
||
|
}
|
||
|
};
|
||
|
__decorate([
|
||
|
version({ since: '1.1.0' })
|
||
|
], ReportRepository$1.prototype, "create", null);
|
||
|
|
||
|
class ScheduledStatusRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View scheduled statuses
|
||
|
* @param params Parameters
|
||
|
* @return Array of ScheduledStatus
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/scheduled_statuses/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/scheduled_statuses', params);
|
||
|
}
|
||
|
/**
|
||
|
* View a single scheduled status
|
||
|
* @param id ID of the scheduled status in the database.
|
||
|
* @return ScheduledStatus
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/scheduled_statuses/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/scheduled_statuses/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Update Scheduled status
|
||
|
* @param id ID of the Status to be scheduled
|
||
|
* @param params Parameters
|
||
|
* @return ScheduledStatus
|
||
|
* @see https://docs.joinmastodon.org/api/rest/scheduled-statuses/#put-api-v1-scheduled-statuses-id
|
||
|
*/
|
||
|
update(id, params) {
|
||
|
return this.http.put(`/api/v1/scheduled_statuses/${id}`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Cancel a scheduled status
|
||
|
* @param id ID of the scheduled status in the database.
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/scheduled_statuses/
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v1/scheduled_statuses/${id}`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '2.7.0' })
|
||
|
], ScheduledStatusRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.7.0' })
|
||
|
], ScheduledStatusRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.7.0' })
|
||
|
], ScheduledStatusRepository.prototype, "update", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.7.0' })
|
||
|
], ScheduledStatusRepository.prototype, "remove", null);
|
||
|
|
||
|
class StatusRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View information about a status.
|
||
|
* @param id Local ID of a status in the database.
|
||
|
* @return Status
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/statuses/${id}`);
|
||
|
}
|
||
|
create(params, extra = {}) {
|
||
|
if (extra.idempotencyKey) {
|
||
|
return this.http.post('/api/v1/statuses', params, {
|
||
|
headers: { 'Idempotency-Key': extra.idempotencyKey },
|
||
|
});
|
||
|
}
|
||
|
return this.http.post('/api/v1/statuses', params);
|
||
|
}
|
||
|
/**
|
||
|
* Update a status
|
||
|
* @param params Parameters
|
||
|
* @return Status. When scheduled_at is present, ScheduledStatus is returned instead.
|
||
|
* @see https://docs.joinmastodon.org/api/rest/statuses/#post-api-v1-statuses
|
||
|
*/
|
||
|
update(id, params) {
|
||
|
return this.http.put(`/api/v1/statuses/${id}`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Delete one of your own statuses.
|
||
|
* @param id Local ID of a status in the database. Must be owned by authenticated account.
|
||
|
* @return Status with source text and `media_attachments` or `poll`
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v1/statuses/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* View statuses above and below this status in the thread.
|
||
|
* @param id Local ID of a status in the database.
|
||
|
* @return Context
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
fetchContext(id) {
|
||
|
return this.http.get(`/api/v1/statuses/${id}/context`);
|
||
|
}
|
||
|
/**
|
||
|
* Preview card
|
||
|
* @deprecated Use `card` attribute of status instead
|
||
|
* @param id ID of the status in the database
|
||
|
* @return Card
|
||
|
* @see https://docs.joinmastodon.org/api/rest/statuses/#get-api-v1-statuses-id-card
|
||
|
*/
|
||
|
fetchCard(id) {
|
||
|
return this.http.get(`/api/v1/statuses/${id}/card`);
|
||
|
}
|
||
|
/**
|
||
|
* Add a status to your favourites list.
|
||
|
* @param id Local ID of a status in the database.
|
||
|
* @return Status
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
favourite(id) {
|
||
|
return this.http.post(`/api/v1/statuses/${id}/favourite`);
|
||
|
}
|
||
|
/**
|
||
|
* Remove a status from your favourites list.
|
||
|
* @param id Local ID of a status in the database.
|
||
|
* @return Status
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
unfavourite(id) {
|
||
|
return this.http.post(`/api/v1/statuses/${id}/unfavourite`);
|
||
|
}
|
||
|
/**
|
||
|
* Do not receive notifications for the thread that this status is part of. Must be a thread in which you are a participant.
|
||
|
* @param id Local ID of a status in the database.
|
||
|
* @return Status
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
mute(id) {
|
||
|
return this.http.post(`/api/v1/statuses/${id}/mute`);
|
||
|
}
|
||
|
/**
|
||
|
* Start receiving notifications again for the thread that this status is part of.
|
||
|
* @param id Local ID of a status in the database.
|
||
|
* @return Status
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
unmute(id) {
|
||
|
return this.http.post(`/api/v1/statuses/${id}/unmute`);
|
||
|
}
|
||
|
/**
|
||
|
* View who boosted a given status.
|
||
|
* @param id Local ID of a status in the database.
|
||
|
* @return Array of Account
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
listRebloggedBy(id) {
|
||
|
return new Paginator(this.http, `/api/v1/statuses/${id}/reblogged_by`);
|
||
|
}
|
||
|
/**
|
||
|
* View who favourited a given status.
|
||
|
* @param id Local ID of a status in the database.
|
||
|
* @return Array of Account
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
listFavouritedBy(id) {
|
||
|
return new Paginator(this.http, `/api/v1/statuses/${id}/favourited_by`);
|
||
|
}
|
||
|
/**
|
||
|
* Re-share a status.
|
||
|
* @param id Local ID of a status in the database.
|
||
|
* @return Status
|
||
|
* @see https://docs.joinmastodon.org/api/rest/statuses/#post-api-v1-statuses-id-reblog
|
||
|
*/
|
||
|
reblog(id, params) {
|
||
|
return this.http.post(`/api/v1/statuses/${id}/reblog`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Undo a re-share of a status.
|
||
|
* @param id Local ID of a status in the database.
|
||
|
* @return Status
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
unreblog(id) {
|
||
|
return this.http.post(`/api/v1/statuses/${id}/unreblog`);
|
||
|
}
|
||
|
/**
|
||
|
* Feature one of your own public statuses at the top of your profile.
|
||
|
* @param id Local ID of a status in the database. The status should be public and authored by the authorized account.
|
||
|
* @return Status
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
pin(id) {
|
||
|
return this.http.post(`/api/v1/statuses/${id}/pin`);
|
||
|
}
|
||
|
/**
|
||
|
* Un-feature a status from the top of your profile.
|
||
|
* @param id Local ID of a status in the database.
|
||
|
* @return Status
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
unpin(id) {
|
||
|
return this.http.post(`/api/v1/statuses/${id}/unpin`);
|
||
|
}
|
||
|
/**
|
||
|
* Privately bookmark a status.
|
||
|
* @param id ID of the status in the database
|
||
|
* @return Status
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
bookmark(id) {
|
||
|
return this.http.post(`/api/v1/statuses/${id}/bookmark`);
|
||
|
}
|
||
|
/**
|
||
|
* Remove a status from your private bookmarks.
|
||
|
* @param id ID of the status in the database
|
||
|
* @return Status
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/
|
||
|
*/
|
||
|
unbookmark(id) {
|
||
|
return this.http.post(`/api/v1/statuses/${id}/unbookmark`);
|
||
|
}
|
||
|
/**
|
||
|
* Get all known versions of a status, including the initial and current states.
|
||
|
* @param id The local id of the status in the database
|
||
|
* @returns StatusEdit
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/#history
|
||
|
*/
|
||
|
listHistory(id) {
|
||
|
return new Paginator(this.http, `/api/v1/statuses/${id}/history`);
|
||
|
}
|
||
|
/**
|
||
|
* Obtain the source properties for a status so that it can be edited.
|
||
|
* @param id The local ID of the Status in the database
|
||
|
* @returns StatusSource
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/#source
|
||
|
*/
|
||
|
fetchSource(id) {
|
||
|
return this.http.get(`/api/v1/statuses/${id}/source`);
|
||
|
}
|
||
|
/**
|
||
|
* Translate the status content into some language.
|
||
|
* @param id String. The ID of the Status in the database.
|
||
|
* @param params Form data parameters
|
||
|
* @returns Translation
|
||
|
*/
|
||
|
translate(id, params) {
|
||
|
return this.http.post(`/api/v1/statuses/${id}/translate`, params, {
|
||
|
headers: { 'Content-Type': 'multipart/form-data' },
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StatusRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StatusRepository.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.5.0' })
|
||
|
], StatusRepository.prototype, "update", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StatusRepository.prototype, "remove", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StatusRepository.prototype, "fetchContext", null);
|
||
|
__decorate([
|
||
|
deprecated('Use `card` attribute of status instead'),
|
||
|
version({ since: '0.0.0', until: '2.9.3' })
|
||
|
], StatusRepository.prototype, "fetchCard", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StatusRepository.prototype, "favourite", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StatusRepository.prototype, "unfavourite", null);
|
||
|
__decorate([
|
||
|
version({ since: '1.4.2' })
|
||
|
], StatusRepository.prototype, "mute", null);
|
||
|
__decorate([
|
||
|
version({ since: '1.4.2' })
|
||
|
], StatusRepository.prototype, "unmute", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StatusRepository.prototype, "listRebloggedBy", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StatusRepository.prototype, "listFavouritedBy", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StatusRepository.prototype, "reblog", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], StatusRepository.prototype, "unreblog", null);
|
||
|
__decorate([
|
||
|
version({ since: '1.6.0' })
|
||
|
], StatusRepository.prototype, "pin", null);
|
||
|
__decorate([
|
||
|
version({ since: '1.6.0' })
|
||
|
], StatusRepository.prototype, "unpin", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.1.0' })
|
||
|
], StatusRepository.prototype, "bookmark", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.1.0' })
|
||
|
], StatusRepository.prototype, "unbookmark", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.5.0' })
|
||
|
], StatusRepository.prototype, "listHistory", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.5.0' })
|
||
|
], StatusRepository.prototype, "fetchSource", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], StatusRepository.prototype, "translate", null);
|
||
|
|
||
|
let SuggestionRepository$1 = class SuggestionRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Accounts the user has had past positive interactions with, but is not yet following.
|
||
|
* @param params
|
||
|
* @returns
|
||
|
* @see https://docs.joinmastodon.org/methods/suggestions/#v1
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/suggestions', params);
|
||
|
}
|
||
|
/**
|
||
|
* Remove an account from follow suggestions.
|
||
|
* @param id id of the account in the database to be removed from suggestions
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/accounts/suggestions/
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v1/suggestions/${id}`);
|
||
|
}
|
||
|
};
|
||
|
__decorate([
|
||
|
deprecated('Use MastoClient.v2.suggestions.list instead'),
|
||
|
version({ since: '2.4.3' })
|
||
|
], SuggestionRepository$1.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.4.3' })
|
||
|
], SuggestionRepository$1.prototype, "remove", null);
|
||
|
|
||
|
class TimelineRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View statuses from followed users.
|
||
|
* @param params Parameters
|
||
|
* @return Array of Status
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/
|
||
|
*/
|
||
|
listHome(params) {
|
||
|
return new Paginator(this.http, '/api/v1/timelines/home', params);
|
||
|
}
|
||
|
/**
|
||
|
* Public timeline
|
||
|
* @param params Parameters
|
||
|
* @return Array of Status
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/
|
||
|
*/
|
||
|
listPublic(params) {
|
||
|
return new Paginator(this.http, '/api/v1/timelines/public', params);
|
||
|
}
|
||
|
/**
|
||
|
* View public statuses containing the given hashtag.
|
||
|
* @param hashtag Content of a #hashtag, not including # symbol.
|
||
|
* @param params Parameters
|
||
|
* @return Array of Status
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/
|
||
|
*/
|
||
|
listHashtag(hashtag, params) {
|
||
|
return new Paginator(this.http, `/api/v1/timelines/tag/${hashtag}`, params);
|
||
|
}
|
||
|
/**
|
||
|
* View statuses in the given list timeline.
|
||
|
* @param id Local ID of the list in the database.
|
||
|
* @param params Query parameter
|
||
|
* @return Array of Status
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/
|
||
|
*/
|
||
|
listList(id, params) {
|
||
|
return new Paginator(this.http, `/api/v1/timelines/list/${id}`, params);
|
||
|
}
|
||
|
/**
|
||
|
* View statuses with a “direct” privacy, from your account or in your notifications.
|
||
|
* @deprecated Use conversations API instead
|
||
|
* @return Array of Status
|
||
|
* @see https://docs.joinmastodon.org/methods/timelines/
|
||
|
*/
|
||
|
listDirect(params) {
|
||
|
return new Paginator(this.http, '/api/v1/timelines/direct', params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], TimelineRepository.prototype, "listHome", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], TimelineRepository.prototype, "listPublic", null);
|
||
|
__decorate([
|
||
|
version({ since: '0.0.0' })
|
||
|
], TimelineRepository.prototype, "listHashtag", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.1.0' })
|
||
|
], TimelineRepository.prototype, "listList", null);
|
||
|
__decorate([
|
||
|
deprecated('Use conversations API instead'),
|
||
|
version({ since: '0.0.0', until: '2.9.3' })
|
||
|
], TimelineRepository.prototype, "listDirect", null);
|
||
|
|
||
|
let TrendRepository$1 = class TrendRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View trending statuses
|
||
|
* @returns Array of Status
|
||
|
* @see https://docs.joinmastodon.org/methods/trends/#statuses
|
||
|
*/
|
||
|
listStatuses(params) {
|
||
|
return new Paginator(this.http, '/api/v1/trends/statuses', params);
|
||
|
}
|
||
|
/**
|
||
|
* Links that have been shared more than others.
|
||
|
* @see https://docs.joinmastodon.org/methods/trends/#links
|
||
|
*/
|
||
|
listLinks(params) {
|
||
|
return new Paginator(this.http, '/api/v1/trends/links', params);
|
||
|
}
|
||
|
/**
|
||
|
* Tags that are being used more frequently within the past week.
|
||
|
* @param params Parameters
|
||
|
* @return Array of Tag with History
|
||
|
* @see https://docs.joinmastodon.org/methods/trends/#tags
|
||
|
*/
|
||
|
listTags(params) {
|
||
|
return new Paginator(this.http, '/api/v1/trends/tags', params);
|
||
|
}
|
||
|
};
|
||
|
__decorate([
|
||
|
version({ since: '3.5.0' })
|
||
|
], TrendRepository$1.prototype, "listStatuses", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.5.0' })
|
||
|
], TrendRepository$1.prototype, "listLinks", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.0.0' })
|
||
|
], TrendRepository$1.prototype, "listTags", null);
|
||
|
|
||
|
class EmailRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
createConfirmation(params) {
|
||
|
return this.http.post('/api/v1/email/confirmations', params);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class TagRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Show a hashtag and its associated information
|
||
|
* @param id The name of the hashtag
|
||
|
* @return Tag
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/tags/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Follow a hashtag. Posts containing a followed hashtag will be inserted into your home timeline.
|
||
|
* @param id The name of the hashtag
|
||
|
* @return Tag
|
||
|
*/
|
||
|
follow(id) {
|
||
|
return this.http.post(`/api/v1/tags/${id}/follow`);
|
||
|
}
|
||
|
/**
|
||
|
* Unfollow a hashtag. Posts containing a followed hashtag will no longer be inserted into your home timeline.
|
||
|
* @param id The name of the hashtag
|
||
|
* @return Tag
|
||
|
*/
|
||
|
unfollow(id) {
|
||
|
return this.http.post(`/api/v1/tags/${id}/unfollow`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], TagRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], TagRepository.prototype, "follow", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], TagRepository.prototype, "unfollow", null);
|
||
|
|
||
|
class FollowedTagRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/followed_tags', params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FollowedTagRepository.prototype, "list", null);
|
||
|
|
||
|
class AccountRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View accounts matching certain criteria for filtering, up to 100 at a time.
|
||
|
* Pagination may be done with the HTTP Link header in the response.
|
||
|
* @param params Parameters
|
||
|
* @return Array of AdminAccount
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/admin/accounts', params);
|
||
|
}
|
||
|
/**
|
||
|
* View admin-level information about the given account.
|
||
|
* @param id ID of the account
|
||
|
* @return AdminAccount
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/admin/accounts/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Perform an action against an account and log this action in the moderation history.
|
||
|
* @param id g ID of the account
|
||
|
* @param params Params
|
||
|
* @return Account
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
createAction(id, params) {
|
||
|
return this.http.post(`/api/v1/admin/accounts/${id}/action`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Approve the given local account if it is currently pending approval.
|
||
|
* @param id ID of the account
|
||
|
* @return AdminAccount
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
approve(id) {
|
||
|
return this.http.post(`/api/v1/admin/accounts/${id}/approve`);
|
||
|
}
|
||
|
/**
|
||
|
* Reject the given local account if it is currently pending approval.
|
||
|
* @param id ID of the account
|
||
|
* @return AdminAccount
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
reject(id) {
|
||
|
return this.http.post(`/api/v1/admin/accounts/${id}/reject`);
|
||
|
}
|
||
|
/**
|
||
|
* Re-enable a local account whose login is currently disabled.
|
||
|
* @param id ID of the account
|
||
|
* @return AdminAccount
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
enable(id) {
|
||
|
return this.http.post(`/api/v1/admin/accounts/${id}/enable`);
|
||
|
}
|
||
|
/**
|
||
|
* Unsilence a currently silenced account.
|
||
|
* @param id ID of the account
|
||
|
* @return AdminAccount
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
unsilence(id) {
|
||
|
return this.http.post(`/api/v1/admin/accounts/${id}/unsilence`);
|
||
|
}
|
||
|
/**
|
||
|
* Unsuspend a currently suspended account.
|
||
|
* @param id ID of the account
|
||
|
* @return AdminAccount
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
unsuspend(id) {
|
||
|
return this.http.post(`/api/v1/admin/accounts/${id}/unsuspend`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], AccountRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], AccountRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], AccountRepository.prototype, "createAction", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], AccountRepository.prototype, "approve", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], AccountRepository.prototype, "reject", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], AccountRepository.prototype, "enable", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], AccountRepository.prototype, "unsilence", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], AccountRepository.prototype, "unsuspend", null);
|
||
|
|
||
|
class CanonicalEmailBlockRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* List all canonical email blocks.
|
||
|
* @param params Parameters
|
||
|
* @return Array of CanonicalEmailBlock
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/canonical_email_blocks/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/admin/canonical_email_blocks', params);
|
||
|
}
|
||
|
/**
|
||
|
* Show a single canonical email block
|
||
|
* @param id id of the canonical email
|
||
|
* @return CanonicalEmailBlock
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/canonical_email_blocks
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/admin/canonical_email_blocks/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Canonicalize and hash an email address.
|
||
|
* @param params Parameters
|
||
|
* @return Array of CanonicalEmailBlock
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/canonical_email_blocks
|
||
|
*/
|
||
|
test(params) {
|
||
|
return this.http.post('/api/v1/admin/canonical_email_blocks/test', params);
|
||
|
}
|
||
|
/**
|
||
|
* Block a canonical email.
|
||
|
* @param params Parameters
|
||
|
* @return CanonicalEmailBlock
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/canonical_email_blocks
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post('/api/v1/admin/canonical_email_blocks', params);
|
||
|
}
|
||
|
/**
|
||
|
* Lift a block a canonical email.
|
||
|
* @param id id of canonical email
|
||
|
* @return null
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/canonical_email_blocks
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v1/admin/canonical_email_blocks/${id}`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], CanonicalEmailBlockRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], CanonicalEmailBlockRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], CanonicalEmailBlockRepository.prototype, "test", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], CanonicalEmailBlockRepository.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], CanonicalEmailBlockRepository.prototype, "remove", null);
|
||
|
|
||
|
class DimensionRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Obtain information about popularity of certain accounts, servers, languages, etc.
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/dimensions/#get
|
||
|
*/
|
||
|
fetch(params) {
|
||
|
return this.http.post('/api/v1/admin/dimensions', params, {
|
||
|
headers: { 'Content-Type': 'multipart/form-data' },
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class DomainAllowRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Show information about all allowed domains
|
||
|
* @param params Parameters
|
||
|
* @return Array of DomainAllow
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/admin/domain_allows', params);
|
||
|
}
|
||
|
/**
|
||
|
* Show information about a single allowed domain
|
||
|
* @param id id of the domain
|
||
|
* @return DomainAllow
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/admin/domain_allows/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Add a domain to the list of domains allowed to federate,
|
||
|
* to be used when the instance is in allow-list federation mode.
|
||
|
* @param params parameters
|
||
|
* @return DomainAllow
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post('/api/v1/admin/domain_allows', params);
|
||
|
}
|
||
|
/**
|
||
|
* Delete a domain from the allowed domains list.
|
||
|
* @param id id of domain
|
||
|
* @return DomainAllow
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v1/admin/domain_allows/${id}`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], DomainAllowRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], DomainAllowRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], DomainAllowRepository.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], DomainAllowRepository.prototype, "remove", null);
|
||
|
|
||
|
class DomainBlockRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
*
|
||
|
* @param params Parameters
|
||
|
* @return Array of DomainBlocks
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/admin/domain_blocks', params);
|
||
|
}
|
||
|
/**
|
||
|
* Show information about a single blocked domain.
|
||
|
* @param id ID of the account
|
||
|
* @return DomainBlocks
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/admin/domain_blocks/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Add a domain to the list of domains blocked from federating.
|
||
|
* @param params Parameters
|
||
|
* @return DomainBlocks
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post('/api/v1/admin/domain_blocks', params);
|
||
|
}
|
||
|
/**
|
||
|
* Change parameters for an existing domain block.
|
||
|
* @param id id of domain
|
||
|
* @param params Parameters
|
||
|
* @return DomainBlocks
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
update(id, params) {
|
||
|
return this.http.put(`/api/v1/admin/domain_blocks/${id}`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Lift a block against a domain.
|
||
|
* @param id id of domain
|
||
|
* @return DomainBlocks
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v1/admin/domain_blocks/${id}`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], DomainBlockRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], DomainBlockRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], DomainBlockRepository.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], DomainBlockRepository.prototype, "update", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], DomainBlockRepository.prototype, "remove", null);
|
||
|
|
||
|
class EmailDomainBlockRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Show information about all email domains blocked from signing up.
|
||
|
* @param params Parameters
|
||
|
* @return Array of EmailDomainBlock
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/admin/email_domain_blocks ', params);
|
||
|
}
|
||
|
/**
|
||
|
* Show information about a single email domain that is blocked from sign-ups.
|
||
|
* @param id id of the DomainBlock
|
||
|
* @return Array of EmailDomainBlock
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/admin/email_domain_blocks/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Add a domain to the list of email domains blocked from sign-ups.
|
||
|
* @param params Parameters
|
||
|
* @return Array of EmailDomainBlock
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post('/api/v1/admin/email_domain_blocks ', params);
|
||
|
}
|
||
|
/**
|
||
|
* Lift a block against an email domain.
|
||
|
* @param id id of domain
|
||
|
* @return null
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v1/admin/email_domain_blocks/${id}`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], EmailDomainBlockRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], EmailDomainBlockRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], EmailDomainBlockRepository.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], EmailDomainBlockRepository.prototype, "remove", null);
|
||
|
|
||
|
class IpBlockRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Show information about all blocked IP ranges.
|
||
|
* @param params Parameters
|
||
|
* @return Array of Ip Block
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/admin/ip_blocks', params);
|
||
|
}
|
||
|
/**
|
||
|
* Show information about all blocked IP ranges.
|
||
|
* @param id id of the Ip blocked
|
||
|
* @return object of Ip Block
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/admin/ip_blocks/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Add an IP address range to the list of IP blocks.
|
||
|
* @param params Parameters
|
||
|
* @return object of Ip Block
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post('/api/v1/admin/ip_blocks', params);
|
||
|
}
|
||
|
/**
|
||
|
* Change parameters for an existing IP block.
|
||
|
* @param params Parameters
|
||
|
* @return object of Ip Block
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
update(params) {
|
||
|
return this.http.put('/api/v1/admin/ip_blocks', params);
|
||
|
}
|
||
|
/**
|
||
|
* Lift a block against an IP range.
|
||
|
* @param id id of ip block
|
||
|
* @return null
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v1/admin/ip_blocks/${id}`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], IpBlockRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], IpBlockRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], IpBlockRepository.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], IpBlockRepository.prototype, "update", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], IpBlockRepository.prototype, "remove", null);
|
||
|
|
||
|
class MeasureRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Obtain quantitative metrics about the server.
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/measures/#get
|
||
|
*/
|
||
|
fetch(params) {
|
||
|
return this.http.post('/api/v1/admin/measures', params, {
|
||
|
headers: { 'Content-Type': 'multipart/form-data' },
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '3.5.0' })
|
||
|
], MeasureRepository.prototype, "fetch", null);
|
||
|
|
||
|
class ReportRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View all reports. Pagination may be done with HTTP Link header in the response.
|
||
|
* @param params Parameters
|
||
|
* @return Array of AdminReport
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v1/admin/reports', params);
|
||
|
}
|
||
|
/**
|
||
|
* View information about the report with the given ID.
|
||
|
* @param id ID of the report
|
||
|
* @return AdminReport
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v1/admin/reports/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Claim the handling of this report to yourself.
|
||
|
* @param id ID of the report
|
||
|
* @return AdminReport
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
assignToSelf(id) {
|
||
|
return this.http.post(`/api/v1/admin/reports/${id}/assign_to_self`);
|
||
|
}
|
||
|
/**
|
||
|
* Unassign a report so that someone else can claim it.
|
||
|
* @param id ID of the report
|
||
|
* @return AdminReport
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
unassign(id) {
|
||
|
return this.http.post(`/api/v1/admin/reports/${id}/unassign`);
|
||
|
}
|
||
|
/**
|
||
|
* Mark a report as resolved with no further action taken.
|
||
|
* @param id ID of the report
|
||
|
* @return AdminReport
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
resolve(id) {
|
||
|
return this.http.post(`/api/v1/admin/reports/${id}/resolve`);
|
||
|
}
|
||
|
/**
|
||
|
* Reopen a currently closed report.
|
||
|
* @param id ID of the report
|
||
|
* @return AdminReport
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/
|
||
|
*/
|
||
|
reopen(id) {
|
||
|
return this.http.post(`/api/v1/admin/reports/${id}/reopen`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], ReportRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], ReportRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], ReportRepository.prototype, "assignToSelf", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], ReportRepository.prototype, "unassign", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], ReportRepository.prototype, "resolve", null);
|
||
|
__decorate([
|
||
|
version({ since: '2.9.1' })
|
||
|
], ReportRepository.prototype, "reopen", null);
|
||
|
|
||
|
class RetentionRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Generate a retention data report for a given time period and bucket.
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/retention/#create
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.get('/api/v1/admin/retention', params, {
|
||
|
headers: { 'Content-Type': 'multipart/form-data' },
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class TrendRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Links that have been shared more than others, including unapproved and unreviewed links.
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/trends/#links
|
||
|
*/
|
||
|
listLinks() {
|
||
|
return new Paginator(this.http, '/api/v1/admin/trends/links');
|
||
|
}
|
||
|
/**
|
||
|
* Statuses that have been interacted with more than others, including unapproved and unreviewed statuses.
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/trends/#statuses
|
||
|
*/
|
||
|
listStatuses() {
|
||
|
return new Paginator(this.http, '/api/v1/admin/trends/statuses');
|
||
|
}
|
||
|
/**
|
||
|
* Tags that are being used more frequently within the past week, including unapproved and unreviewed tags.
|
||
|
* @see https://docs.joinmastodon.org/methods/admin/trends/#tags
|
||
|
*/
|
||
|
listTags() {
|
||
|
return new Paginator(this.http, '/api/v1/admin/trends/statuses');
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '3.5.0' })
|
||
|
], TrendRepository.prototype, "listLinks", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.5.0' })
|
||
|
], TrendRepository.prototype, "listStatuses", null);
|
||
|
__decorate([
|
||
|
version({ since: '3.5.0' })
|
||
|
], TrendRepository.prototype, "listTags", null);
|
||
|
|
||
|
var index$3 = /*#__PURE__*/Object.freeze({
|
||
|
__proto__: null,
|
||
|
AccountRepository: AccountRepository,
|
||
|
CanonicalEmailBlockRepository: CanonicalEmailBlockRepository,
|
||
|
DimensionRepository: DimensionRepository,
|
||
|
DomainAllowRepository: DomainAllowRepository,
|
||
|
DomainBlockRepository: DomainBlockRepository,
|
||
|
EmailDomainBlockRepository: EmailDomainBlockRepository,
|
||
|
IpBlockRepository: IpBlockRepository,
|
||
|
MeasureRepository: MeasureRepository,
|
||
|
ReportRepository: ReportRepository,
|
||
|
RetentionRepository: RetentionRepository,
|
||
|
TrendRepository: TrendRepository
|
||
|
});
|
||
|
|
||
|
class AggregateRepositoryAdmin {
|
||
|
/** @deprecated Use `accounts` instead */
|
||
|
get account() {
|
||
|
return this.accounts;
|
||
|
}
|
||
|
/** @deprecated Use `reports` instead */
|
||
|
get report() {
|
||
|
return this.reports;
|
||
|
}
|
||
|
/** @deprecated Use `emailDomainBlocks` instead */
|
||
|
get domainEmailBlocks() {
|
||
|
return this.emailDomainBlocks;
|
||
|
}
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
this.accounts = new AccountRepository(this.http, this.config, this.logger);
|
||
|
this.canonicalEmailBlocks =
|
||
|
new CanonicalEmailBlockRepository(this.http, this.config, this.logger);
|
||
|
this.dimensions = new DimensionRepository(this.http, this.config, this.logger);
|
||
|
this.domainBlocks = new DomainBlockRepository(this.http, this.config, this.logger);
|
||
|
this.domainAllows = new DomainAllowRepository(this.http, this.config, this.logger);
|
||
|
this.emailDomainBlocks = new EmailDomainBlockRepository(this.http, this.config, this.logger);
|
||
|
this.ipBlocks = new IpBlockRepository(this.http, this.config, this.logger);
|
||
|
this.measures = new MeasureRepository(this.http, this.config, this.logger);
|
||
|
this.reports = new ReportRepository(this.http, this.config, this.logger);
|
||
|
this.retention = new RetentionRepository(this.http, this.config, this.logger);
|
||
|
this.trends = new TrendRepository(this.http, this.config, this.logger);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
let AggregateRepository$1 = class AggregateRepository {
|
||
|
constructor(http, ws, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
this.admin = new AggregateRepositoryAdmin(http, config, logger);
|
||
|
this.stream = new StreamRepository(ws, config, logger);
|
||
|
this.accounts = new AccountRepository$1(http, config, logger);
|
||
|
this.announcements = new AnnouncementRepository(http, config, logger);
|
||
|
this.apps = new AppRepository(http, config, logger);
|
||
|
this.blocks = new BlockRepository(http, config, logger);
|
||
|
this.bookmarks = new BookmarkRepository(http, config, logger);
|
||
|
this.conversations = new ConversationRepository(http, config, logger);
|
||
|
this.customEmojis = new CustomEmojiRepository(http, config, logger);
|
||
|
this.directory = new DirectoryRepository(http, config, logger);
|
||
|
this.domainBlocks = new DomainBlockRepository$1(http, config, logger);
|
||
|
this.endorsements = new EndorsementRepository(http, config, logger);
|
||
|
this.favourites = new FavouriteRepository(http, config, logger);
|
||
|
this.featuredTags = new FeaturedTagRepository(http, config, logger);
|
||
|
this.filters = new FilterRepository$1(http, config, logger);
|
||
|
this.followRequests = new FollowRequestRepository(http, config, logger);
|
||
|
this.instances = new InstanceRepository$1(http, config, logger);
|
||
|
this.lists = new ListRepository(http, config, logger);
|
||
|
this.markers = new MarkerRepository(http, config, logger);
|
||
|
this.mediaAttachments = new MediaAttachmentRepository$1(http, config, logger);
|
||
|
this.mutes = new MuteRepository(http, config, logger);
|
||
|
this.notifications = new NotificationRepository(http, config, logger);
|
||
|
this.polls = new PollRepository(http, config, logger);
|
||
|
this.preferences = new PreferenceRepository(http, config, logger);
|
||
|
this.webPushSubscriptions = new WebPushSubscriptionRepository(http, config, logger);
|
||
|
this.reports = new ReportRepository$1(http, config, logger);
|
||
|
this.scheduledStatuses = new ScheduledStatusRepository(http, config, logger);
|
||
|
this.statuses = new StatusRepository(http, config, logger);
|
||
|
this.suggestions = new SuggestionRepository$1(http, config, logger);
|
||
|
this.timelines = new TimelineRepository(http, config, logger);
|
||
|
this.trends = new TrendRepository$1(http, config, logger);
|
||
|
this.email = new EmailRepository(http, config, logger);
|
||
|
this.tags = new TagRepository(http, config, logger);
|
||
|
this.followedTags = new FollowedTagRepository(http, config, logger);
|
||
|
}
|
||
|
/**
|
||
|
* Search, but hashtags is an array of strings instead of an array of Tag.
|
||
|
* @param params Parameters
|
||
|
* @return Results
|
||
|
* @see https://docs.joinmastodon.org/methods/search/
|
||
|
*/
|
||
|
search(params) {
|
||
|
return new Paginator(this.http, `/api/v1/search`, params);
|
||
|
}
|
||
|
};
|
||
|
__decorate([
|
||
|
version({ since: '1.1.0', until: '3.0.0' })
|
||
|
], AggregateRepository$1.prototype, "search", null);
|
||
|
|
||
|
var index$2 = /*#__PURE__*/Object.freeze({
|
||
|
__proto__: null,
|
||
|
AccountRepository: AccountRepository$1,
|
||
|
Admin: index$4,
|
||
|
AdminRepositories: index$3,
|
||
|
AggregateRepository: AggregateRepository$1,
|
||
|
AggregateRepositoryAdmin: AggregateRepositoryAdmin,
|
||
|
AnnouncementRepository: AnnouncementRepository,
|
||
|
AppRepository: AppRepository,
|
||
|
BlockRepository: BlockRepository,
|
||
|
BookmarkRepository: BookmarkRepository,
|
||
|
ConversationRepository: ConversationRepository,
|
||
|
CustomEmojiRepository: CustomEmojiRepository,
|
||
|
DirectoryRepository: DirectoryRepository,
|
||
|
DomainBlockRepository: DomainBlockRepository$1,
|
||
|
EmailRepository: EmailRepository,
|
||
|
EndorsementRepository: EndorsementRepository,
|
||
|
FavouriteRepository: FavouriteRepository,
|
||
|
FeaturedTagRepository: FeaturedTagRepository,
|
||
|
FilterRepository: FilterRepository$1,
|
||
|
FollowRequestRepository: FollowRequestRepository,
|
||
|
FollowedTagRepository: FollowedTagRepository,
|
||
|
InstanceRepository: InstanceRepository$1,
|
||
|
ListRepository: ListRepository,
|
||
|
MarkerRepository: MarkerRepository,
|
||
|
MediaAttachmentRepository: MediaAttachmentRepository$1,
|
||
|
MuteRepository: MuteRepository,
|
||
|
NotificationRepository: NotificationRepository,
|
||
|
PollRepository: PollRepository,
|
||
|
PreferenceRepository: PreferenceRepository,
|
||
|
ReportRepository: ReportRepository$1,
|
||
|
ScheduledStatusRepository: ScheduledStatusRepository,
|
||
|
StatusRepository: StatusRepository,
|
||
|
StreamRepository: StreamRepository,
|
||
|
SuggestionRepository: SuggestionRepository$1,
|
||
|
TagRepository: TagRepository,
|
||
|
TimelineRepository: TimelineRepository,
|
||
|
TrendRepository: TrendRepository$1,
|
||
|
WebPushSubscriptionRepository: WebPushSubscriptionRepository
|
||
|
});
|
||
|
|
||
|
class FilterRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View all filters
|
||
|
* @return Array of Filter
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#get
|
||
|
*/
|
||
|
list() {
|
||
|
return new Paginator(this.http, `/api/v2/filters`);
|
||
|
}
|
||
|
/**
|
||
|
* Obtain a single filter group owned by the current user.
|
||
|
* @param id ID of the filter
|
||
|
* @return Filter
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#get-one
|
||
|
*/
|
||
|
fetch(id) {
|
||
|
return this.http.get(`/api/v2/filters/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Create a filter group with the given parameters.
|
||
|
* @param params Parameters
|
||
|
* @return Filter
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#create
|
||
|
*/
|
||
|
create(params) {
|
||
|
return this.http.post(`/api/v2/filters`, params, {
|
||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Update a filter group with the given parameters.
|
||
|
* @param id ID of the filter in the database
|
||
|
* @param params Parameters
|
||
|
* @return Filter
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#update
|
||
|
*/
|
||
|
update(id, params) {
|
||
|
return this.http.put(`/api/v2/filters/${id}`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Delete a filter group with the given id.
|
||
|
* @param id ID of the filter in the database
|
||
|
* @return N/A
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#delete
|
||
|
*/
|
||
|
remove(id) {
|
||
|
return this.http.delete(`/api/v2/filters/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* List all keywords attached to the current filter group.
|
||
|
* @param id String. The ID of the Filter in the database.
|
||
|
* @returns Array of FilterKeyword
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#keywords-get
|
||
|
*/
|
||
|
listKeywords(id) {
|
||
|
return new Paginator(this.http, `/api/v2/filters/${id}/keywords`);
|
||
|
}
|
||
|
/**
|
||
|
* Add the given keyword to the specified filter group
|
||
|
* @param id String. The ID of the Filter in the database.
|
||
|
* @param params Parameters
|
||
|
* @return FilterKeywords
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#keywords-create
|
||
|
*/
|
||
|
createKeyword(id, params) {
|
||
|
return this.http.post(`/api/v2/filters/${id}/keywords`, params, {
|
||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Get one filter keyword by the given id.
|
||
|
* @param id String. The ID of the FilterKeyword in the database.
|
||
|
* @returns FilterKeyword
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#keywords-get-one
|
||
|
*/
|
||
|
fetchKeyword(id) {
|
||
|
return new Paginator(this.http, `/api/v2/filters/keywords/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Update the given filter keyword.
|
||
|
* @param id String. The ID of the FilterKeyword in the database.
|
||
|
* @param params Parameters
|
||
|
* @return FilterKeywords
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#keywords-update
|
||
|
*/
|
||
|
updateKeyword(id, params) {
|
||
|
return this.http.put(`/api/v2/filters/keywords/${id}`, params, {
|
||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Deletes the given filter keyword.
|
||
|
* @param id String. The ID of the FilterKeyword in the database.
|
||
|
* @returns empty object
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#keywords-delete
|
||
|
*/
|
||
|
removeKeyword(id) {
|
||
|
return this.http.delete(`/api/v2/filters/keywords/${id}`);
|
||
|
}
|
||
|
/**
|
||
|
* Obtain a list of all status filters within this filter group.
|
||
|
* @param id String. The ID of the Filter in the database.
|
||
|
* @returns Array of FilterStatus
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#statuses-get
|
||
|
*/
|
||
|
listStatuses(id) {
|
||
|
return new Paginator(this.http, `/api/v2/filters/${id}/statuses`);
|
||
|
}
|
||
|
/**
|
||
|
* Add a status filter to the current filter group.
|
||
|
* @param id String. The ID of the Filter in the database.
|
||
|
* @param params
|
||
|
* @returns FilterStatus
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#statuses-add
|
||
|
*/
|
||
|
createStatus(id, params) {
|
||
|
return this.http.post(`/api/v2/filters/${id}/statuses`, params);
|
||
|
}
|
||
|
/**
|
||
|
* Obtain a single status filter.
|
||
|
* @param id String. The ID of the FilterStatus in the database.
|
||
|
* @returns FilterStatus
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#statuses-get-one
|
||
|
*/
|
||
|
fetchStatus(id) {
|
||
|
return this.http.get(`/api/v2/filters/${id}/statuses`);
|
||
|
}
|
||
|
/**
|
||
|
* @param id String. The ID of the FilterStatus in the database.
|
||
|
* @returns FilterStatus
|
||
|
* @see https://docs.joinmastodon.org/methods/filters/#statuses-get-one
|
||
|
*/
|
||
|
removeStatus(id) {
|
||
|
return this.http.get(`/api/v2/filters/statuses/${id}`);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "list", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "fetch", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "create", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "update", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "remove", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "listKeywords", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "createKeyword", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "fetchKeyword", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "updateKeyword", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "removeKeyword", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "listStatuses", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "fetchStatus", null);
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], FilterRepository.prototype, "removeStatus", null);
|
||
|
|
||
|
class InstanceRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* Information about the server.
|
||
|
* @return Instance
|
||
|
* @see https://docs.joinmastodon.org/methods/instance/
|
||
|
*/
|
||
|
fetch() {
|
||
|
return this.http.get('/api/v2/instance');
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '4.0.0' })
|
||
|
], InstanceRepository.prototype, "fetch", null);
|
||
|
|
||
|
// Repository<V1.MediaAttachment, CreateMediaAttachmentParams>;
|
||
|
class MediaAttachmentRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
this.v1 = new MediaAttachmentRepository$1(http, config);
|
||
|
}
|
||
|
/**
|
||
|
* @experimental
|
||
|
* @param id ID of the media
|
||
|
* @param interval interval of polling
|
||
|
* @returns Media attachment that has done processing
|
||
|
*/
|
||
|
waitFor(id, interval = 1000) {
|
||
|
return __awaiter(this, void 0, void 0, function* () {
|
||
|
const timeout = this.config.createTimeout();
|
||
|
let media;
|
||
|
while (media == undefined) {
|
||
|
if (timeout.signal.aborted) {
|
||
|
throw new MastoTimeoutError('The media encoding has been timed out in your instance.');
|
||
|
}
|
||
|
yield delay(interval);
|
||
|
try {
|
||
|
const processing = yield this.v1.fetch(id);
|
||
|
if (processing.url != undefined) {
|
||
|
media = processing;
|
||
|
timeout.clear();
|
||
|
}
|
||
|
}
|
||
|
catch (error) {
|
||
|
// Some instance caches API response
|
||
|
if (error instanceof MastoHttpNotFoundError) {
|
||
|
continue;
|
||
|
}
|
||
|
throw error;
|
||
|
}
|
||
|
}
|
||
|
return media;
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Creates an attachment to be used with a new status.
|
||
|
* @param params Parameters
|
||
|
* @return Attachment
|
||
|
* @see https://docs.joinmastodon.org/methods/statuses/media/
|
||
|
*/
|
||
|
create(params, extra = {}) {
|
||
|
return __awaiter(this, void 0, void 0, function* () {
|
||
|
const media = yield this.http.post(`/api/v2/media`, params, { headers: { 'Content-Type': 'multipart/form-data' } });
|
||
|
if (extra.skipPolling) {
|
||
|
return media;
|
||
|
}
|
||
|
return this.waitFor(media.id);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '3.1.3' })
|
||
|
], MediaAttachmentRepository.prototype, "create", null);
|
||
|
|
||
|
class SuggestionRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
/**
|
||
|
* View follow suggestions.
|
||
|
* Accounts that are promoted by staff, or that the user has had past positive interactions with, but is not yet following.
|
||
|
* @param params
|
||
|
* @returns
|
||
|
*/
|
||
|
list(params) {
|
||
|
return new Paginator(this.http, '/api/v2/suggestions', params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '3.4.0' })
|
||
|
], SuggestionRepository.prototype, "list", null);
|
||
|
|
||
|
class AggregateRepository {
|
||
|
constructor(http, config, logger) {
|
||
|
this.http = http;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
this.filters = new FilterRepository(http, config, logger);
|
||
|
this.instance = new InstanceRepository(http, config, logger);
|
||
|
this.mediaAttachments = new MediaAttachmentRepository(http, config, logger);
|
||
|
this.suggestions = new SuggestionRepository(http, config, logger);
|
||
|
}
|
||
|
/**
|
||
|
* Perform a search
|
||
|
* @param params Parameters
|
||
|
* @return Results
|
||
|
* @see https://docs.joinmastodon.org/methods/search/
|
||
|
*/
|
||
|
search(params) {
|
||
|
return new Paginator(this.http, `/api/v2/search`, params);
|
||
|
}
|
||
|
}
|
||
|
__decorate([
|
||
|
version({ since: '2.4.1' })
|
||
|
], AggregateRepository.prototype, "search", null);
|
||
|
|
||
|
var index$1 = /*#__PURE__*/Object.freeze({
|
||
|
__proto__: null,
|
||
|
AggregateRepository: AggregateRepository,
|
||
|
FilterRepository: FilterRepository,
|
||
|
InstanceRepository: InstanceRepository,
|
||
|
MediaAttachmentRepository: MediaAttachmentRepository,
|
||
|
SuggestionRepository: SuggestionRepository
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* @experimental
|
||
|
*/
|
||
|
class OAuthRepository {
|
||
|
constructor(http) {
|
||
|
this.http = http;
|
||
|
}
|
||
|
createToken(params) {
|
||
|
return this.http.post('/oauth/token', params, {
|
||
|
headers: { 'Content-Type': 'multipart/form-data' },
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class Client {
|
||
|
constructor(http, ws, config, logger) {
|
||
|
this.http = http;
|
||
|
this.ws = ws;
|
||
|
this.config = config;
|
||
|
this.logger = logger;
|
||
|
this.v1 = new AggregateRepository$1(http, ws, config, logger);
|
||
|
this.v2 = new AggregateRepository(http, config, logger);
|
||
|
this.oauth = new OAuthRepository(http);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var index = /*#__PURE__*/Object.freeze({
|
||
|
__proto__: null,
|
||
|
Client: Client,
|
||
|
v1: index$2,
|
||
|
v2: index$1
|
||
|
});
|
||
|
|
||
|
const isObject = (x) => typeof x === 'object' && x !== null && x.constructor.name === 'Object';
|
||
|
|
||
|
const flattenObject = (object, parent = '') => {
|
||
|
if (Array.isArray(object)) {
|
||
|
return object
|
||
|
.map((value, i) => flattenObject(value, parent == '' ? i.toString() : `${parent}[${i}]`))
|
||
|
.reduce((prev, curr) => Object.assign(prev, curr), {});
|
||
|
}
|
||
|
if (isObject(object)) {
|
||
|
return Object.entries(object)
|
||
|
.map(([key, value]) => flattenObject(value, parent === '' ? key : `${parent}[${key}]`))
|
||
|
.reduce((prev, curr) => Object.assign(prev, curr), {});
|
||
|
}
|
||
|
// Unit of the monoid is always an object
|
||
|
return parent === ''
|
||
|
? object
|
||
|
: { [parent]: object };
|
||
|
};
|
||
|
|
||
|
const transformKeys = (data, transform) => {
|
||
|
if (Array.isArray(data)) {
|
||
|
return data.map((value) => transformKeys(value, transform));
|
||
|
}
|
||
|
if (isObject(data)) {
|
||
|
return Object.fromEntries(Object.entries(data).map(([key, value]) => [
|
||
|
transform(key),
|
||
|
transformKeys(value, transform),
|
||
|
]));
|
||
|
}
|
||
|
return data;
|
||
|
};
|
||
|
|
||
|
class SerializerNativeImpl {
|
||
|
serialize(type, rawData) {
|
||
|
if (rawData == undefined) {
|
||
|
return;
|
||
|
}
|
||
|
const data = transformKeys(rawData, changeCase.snakeCase);
|
||
|
switch (type) {
|
||
|
case 'application/json': {
|
||
|
return JSON.stringify(data);
|
||
|
}
|
||
|
case 'multipart/form-data': {
|
||
|
const formData = new ponyfills.FormData();
|
||
|
for (const [key, value] of Object.entries(flattenObject(data))) {
|
||
|
// `form-data` module has an issue that they doesn't set filename
|
||
|
// https://github.com/neet/masto.js/issues/481
|
||
|
// https://github.com/mastodon/mastodon/issues/17622
|
||
|
if (globalThis.Buffer != undefined &&
|
||
|
value instanceof globalThis.Buffer) {
|
||
|
// We set `blob` as filename, which is the default for Blob defined by the spec
|
||
|
// https://developer.mozilla.org/en-US/docs/Web/API/FormData/append
|
||
|
formData.append(key, value, 'blob');
|
||
|
continue;
|
||
|
}
|
||
|
formData.append(key, value);
|
||
|
}
|
||
|
return formData;
|
||
|
}
|
||
|
case 'application/x-www-form-urlencoded': {
|
||
|
return qs.stringify(data, {
|
||
|
encode: false,
|
||
|
arrayFormat: 'brackets',
|
||
|
});
|
||
|
}
|
||
|
default: {
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
serializeQueryString(rawData) {
|
||
|
const data = transformKeys(rawData, changeCase.snakeCase);
|
||
|
return qs.stringify(data, {
|
||
|
encode: false,
|
||
|
arrayFormat: 'brackets',
|
||
|
});
|
||
|
}
|
||
|
deserialize(type, data) {
|
||
|
switch (type) {
|
||
|
case 'application/json': {
|
||
|
try {
|
||
|
return transformKeys(JSON.parse(data), changeCase.camelCase);
|
||
|
}
|
||
|
catch (_a) {
|
||
|
return undefined;
|
||
|
}
|
||
|
}
|
||
|
default: {
|
||
|
throw new MastoDeserializeError(`Unknown content type ${type} returned from the server.`, type, data);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mastodon streaming api wrapper
|
||
|
*/
|
||
|
class WsEventsNativeImpl extends EventEmitter {
|
||
|
constructor(ws, serializer, logger) {
|
||
|
super();
|
||
|
this.ws = ws;
|
||
|
this.serializer = serializer;
|
||
|
this.logger = logger;
|
||
|
/**
|
||
|
* Parse JSON data and emit it as an event
|
||
|
* @param message Websocket message
|
||
|
*/
|
||
|
this.handleMessage = ({ data }) => {
|
||
|
const { event, payload } = this.serializer.deserialize('application/json', data);
|
||
|
this.logger.info(`↓ WEBSOCKET ${event}`);
|
||
|
this.logger.debug('\tbody', payload);
|
||
|
// https://github.com/neet/masto.js/issues/750
|
||
|
if (event === 'delete') {
|
||
|
return void this.emit(event, payload);
|
||
|
}
|
||
|
let args = [];
|
||
|
try {
|
||
|
args.push(this.serializer.deserialize('application/json', payload));
|
||
|
}
|
||
|
catch (_a) {
|
||
|
args = [];
|
||
|
}
|
||
|
this.emit(event, ...args);
|
||
|
};
|
||
|
}
|
||
|
/**
|
||
|
* Connect to the websocket endpoint
|
||
|
* @param url URL of the websocket endpoint
|
||
|
* @param protocols Subprotocol(s) for `Sec-Websocket-Protocol`
|
||
|
* @param params URL parameters
|
||
|
*/
|
||
|
static connect(url, serializer, logger, protocols) {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
const ws = new WebSocket(url, protocols);
|
||
|
const instance = new WsEventsNativeImpl(ws, serializer, logger);
|
||
|
ws.addEventListener('message', instance.handleMessage);
|
||
|
ws.addEventListener('error', reject);
|
||
|
ws.addEventListener('open', () => resolve(instance));
|
||
|
});
|
||
|
}
|
||
|
/**
|
||
|
* Disconnect from the websocket endpoint
|
||
|
*/
|
||
|
disconnect() {
|
||
|
if (!this.ws)
|
||
|
return;
|
||
|
this.ws.close();
|
||
|
}
|
||
|
}
|
||
|
class WsNativeImpl {
|
||
|
constructor(config, serializer, logger) {
|
||
|
this.config = config;
|
||
|
this.serializer = serializer;
|
||
|
this.logger = logger;
|
||
|
}
|
||
|
stream(path, params = {}) {
|
||
|
return WsEventsNativeImpl.connect(this.config.resolveWebsocketPath(path, params), this.serializer, this.logger, this.config.createWebsocketProtocols());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const buildHttpContext = (params) => {
|
||
|
const version = params.version && !params.disableVersionCheck
|
||
|
? new semver.SemVer(params.version, true)
|
||
|
: undefined;
|
||
|
const props = Object.assign(Object.assign({}, params), { version });
|
||
|
const serializer = new SerializerNativeImpl();
|
||
|
const config = new MastoConfig(props, serializer);
|
||
|
const logger = new LoggerConsoleImpl(config.getLogLevel());
|
||
|
const http = new HttpNativeImpl(serializer, config, logger);
|
||
|
return { serializer, config, logger, http };
|
||
|
};
|
||
|
const fetchV1Instance = (params) => {
|
||
|
const { http, config } = buildHttpContext(params);
|
||
|
return new InstanceRepository$1(http, config).fetch();
|
||
|
};
|
||
|
const fetchV2Instance = (params) => {
|
||
|
const { http, config } = buildHttpContext(params);
|
||
|
return new InstanceRepository(http, config).fetch();
|
||
|
};
|
||
|
const createClient = (params) => {
|
||
|
const { serializer, config, logger, http } = buildHttpContext(params);
|
||
|
const ws = new WsNativeImpl(config, serializer, logger);
|
||
|
logger.debug('Masto.js initialised', config);
|
||
|
return new Client(http, ws, config, logger);
|
||
|
};
|
||
|
/**
|
||
|
* Fetching instance information and create a client
|
||
|
*
|
||
|
* Shortcut of `fetchV1Instance` and `createClient`
|
||
|
*/
|
||
|
const login = (params) => __awaiter(void 0, void 0, void 0, function* () {
|
||
|
const instance = yield fetchV1Instance(params);
|
||
|
return createClient(Object.assign(Object.assign({}, params), { version: instance.version, streamingApiUrl: instance.urls.streamingApi }));
|
||
|
});
|
||
|
|
||
|
exports.BaseHttp = BaseHttp;
|
||
|
exports.BaseLogger = BaseLogger;
|
||
|
exports.HttpNativeImpl = HttpNativeImpl;
|
||
|
exports.LogLevel = LogLevel;
|
||
|
exports.LoggerConsoleImpl = LoggerConsoleImpl;
|
||
|
exports.MastoConfig = MastoConfig;
|
||
|
exports.Paginator = Paginator;
|
||
|
exports.SerializerNativeImpl = SerializerNativeImpl;
|
||
|
exports.WsEventsNativeImpl = WsEventsNativeImpl;
|
||
|
exports.WsNativeImpl = WsNativeImpl;
|
||
|
exports.createClient = createClient;
|
||
|
exports.fetchV1Instance = fetchV1Instance;
|
||
|
exports.fetchV2Instance = fetchV2Instance;
|
||
|
exports.login = login;
|
||
|
exports.mastodon = index;
|