Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/quority/core
Typed MediaWiki API client for node.js using TypeScript.
https://github.com/quority/core
mediawiki wiki
Last synced: 4 days ago
JSON representation
Typed MediaWiki API client for node.js using TypeScript.
- Host: GitHub
- URL: https://github.com/quority/core
- Owner: quority
- License: mit
- Created: 2021-07-26T16:20:08.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-10-19T06:24:51.000Z (17 days ago)
- Last Synced: 2024-10-20T18:39:19.333Z (16 days ago)
- Topics: mediawiki, wiki
- Language: TypeScript
- Homepage: https://npmjs.com/package/mw.js
- Size: 6.11 MB
- Stars: 6
- Watchers: 1
- Forks: 1
- Open Issues: 31
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![Logo](https://avatars.githubusercontent.com/u/126923974?s=200&v=4)
[![GitHub](https://img.shields.io/github/license/quority/core)](https://github.com/quority/core/blob/main/LICENSE.md)
[![npm](https://img.shields.io/npm/v/@quority/core?color=crimson&logo=npm&style=flat-square)](https://www.npmjs.com/package/@quority/core)---
Typed MediaWiki API wrapper for node.js, focused on supporting [MediaWiki's Action API](https://www.mediawiki.org/wiki/API:Main_page).- [Features](#features)
- [Installation](#installation)
- [Usage](#usage)
- [Wiki instance](#wiki-instance)
- [Custom strategy](#custom-strategy)
- [Log in](#log-in)# Features
- Written in TypeScript.
- Extendable API.
- Full TypeScript and JavaScript support.
- Can be used with CJS (`require`) or ESM (`import`).# Installation
```bash
# npm
npm install @quority/core# yarn
yarn add @quority/core
```# Usage
For most uses, you will want to import the `Wiki` constructor. Code snippets will use ESM syntax, but you can use `require` instead:```ts
// ESM
import { Wiki } from '@quority/core'// CJS
const { Wiki } = require( '@quority/core' )
```## Wiki instance
```ts
import { Wiki } from '@quority/core'const wiki = new Wiki( {
api: 'https://www.mediawiki.org/w/api.php'
} )
```By default, you'll need to use the API url for the wiki. This behavior can be changed using a strategy.
## Custom strategy
Strategies allow you to add support to custom features for a MediaWiki installation, or to change how is the api interpreted in the wiki's constructor.The following example will allow you to create `Wiki` instances for a Wikipedia by just defining its language in the `api` property of the constructor.
```ts
import { BaseStrategy } from '@quority/core'class WikipediaStrategy extends BaseStrategy {
public static override getApi( api: string ): URL {
return new URL( `https://${ api }.wikipedia.org/w/api.php` )
}
}
```
> :warning: You might want to throw an error if the parameter isn't a language code.The strategy can be manually set in the constructor of an instance:
```ts
const wiki = new Wiki( {
api: 'es',
platform: WikipediaStrategy
} )
```Or you can extend a class that will use your custom strategy by default:
```ts
class Wikipedia extends Wiki {
public static override readonly defaultStrategy = WikipediaStrategy
}const wiki = new Wikipedia( {
api: 'es'
} )
```Strategies can also be used to add support to different API endpoints that aren't included in default MediaWiki installations. This is pending to be documented.
## Log in
You can login to get a `Bot` instance by using the `#login` method in `Wiki`.```ts
import { Wiki } from '@quority/core'const wiki = new Wiki( {
api: 'https://www.mediawiki.org/w/api.php'
} )
const bot = await wiki.login( 'BotPasswords user', 'BotPasswords password' )
```
> :floppy_disk: If you aren't familiar with [BotPasswords](https://www.mediawiki.org/wiki/Manual:Bot_passwords), you may find useful to read [Bot passwords & you (& your bot (& you))](https://river.me/blog/bot-passwords/)The bot instance supports most actions that can be performed through the API as individual methods:
```ts
await bot.edit( {
text: 'This is a test',
title: 'Test'
} )
```All actions will be made on the wiki that created the instance.