pdelfan / arena-typed

Unofficial are.na API wrapper for TypeScript
MIT License
9 stars 1 forks source link
are-na

cover

Arena-typed

Unofficial are.na API wrapper for TypeScript

Installation

npm install arena-typed

Quick start

To get started, create a new Arena instance and use its methods.

Note: Some actions require authentication. To obtain an access token:

import Arena from 'arena-typed';

const arena = new Arena();

const channel = await arena.channels.get('arena-influences');
console.log(channel.title);

// or using promises
arena.channels.get('arena-influences').then((channel) => {
  console.log(channel.title);
});

Usage

The Arena class has four properties which are instances of subclasses with their own methods:

Params

Some methods support pagination (optional), specified by pagination. Pass as an object like so: { page: 2, per: 15 }

Users

Method Returns Description
get(username: string) Promise<FollowingType> Get a specific user
channels(username: string) Promise<Channel[]> Get a list of the specified user's channels
followers(username: string) Promise<User[] Get a list of users following the specified user
following(username: string) Promise<User[]> Get a list of the specified user's followed channels and users

Examples

arena.users.get('testing-arena').then((users) => console.log('result', users));

arena.users.channels('testing-arena').then((channels) => console.log('result', channels));

arena.users.followers('testing-arena').then((followers) => console.log('result', followers));

arena.users.following('testing-arena').then((following) => console.log('result', following));

Search

Method Returns Description
all(query: string, pagination?: PaginationParams) Promise<SearchResponse> Perform a search
users(username: string) Promise<User[]> Search for users
channels(channel: string) Promise<Channel[] Search for channels
blocks(blocks: string) Promise<Block[]> Search for blocks

Examples

arena.search.all('testing').then((search) => console.log('result', search));

arena.search.users('testing-arena').then((search) => console.log('result', search));

arena.search.channels('arena-influences').then((search) => console.log('result', search));

arena.search.blocks('testing').then((search) => console.log('result', search));

Blocks

Method Returns Description
get(id: number) Promise<Block> Get a block
channels(id: number) Promise<Channel[] Get a list of channels the block is in
create(channel: string, data: BlockCreationData) Promise<Block> Create a new block in the specified channel
update(id: number, data: BlockUpdateData) Promise<void> Update a block that exists in the specified channel
delete(channel: string, id: number) Promise<void> Delete a block that exists in the specified channel

Examples

arena.blocks.channels(1234).then((channels) => console.log('channels', channels));

arena.blocks.create('new-channel-name', { source: 'new title' }).then((blocks) => console.log('result', blocks));

arena.blocks
  .update(123456, { title: 'updated title', description: 'updated description' })
  .catch((error) => console.log(error.message));

arena.blocks.delete('channel-name', 12345).catch((error) => console.log(error.message));

Channels

Method Returns Description
get (channel: string, pagination?: PaginationParams) Promise<Channel> Get a channel
thumb(channel: string) Promise<Channel Get basic information about a channel
connections(channel: string, pagination?: PaginationParams) Promise<Connection> Get all the connections within a channel
contents(channel: string, pagination?: PaginationParams) Promise<(Channel \| Block)[]> Get only the contents of a channel (ex. no collaborators)
create(data: ChannelCreationData) Promise<Channel> Create a channel
update(channel: string, data: ChannelCreationData) Promise<Channel> Update a channel
delete(channel: string) Promise<void> Delete a channel
createBlock(channel: string, data: BlockCreationData) Promise<Block> Create a block in the specified channel
collaborators(channel: string) Promise<User[]> Get all users that are part of the specified channel, excluding the owner
addCollaborators(channel: string, users: CollaboratorData) Promise<User[]> Add collaborators to the specified channel
removeCollaborators(channel: string, users: CollaboratorData) Promise<User[]> Delete specified collaborators from the specified channel. Note: On the official documentaion, this request is supposed to remove users that are not specified in users. However, it currently works the other way around

Examples

arena.channels.get('channel-name').then((channel) => console.log('channel', channel));

arena.channels.thumb('channel-name').then((channel) => console.log('channel', channel));

arena.channels.connections('channel-name', { per, 20, page: 2 }).then((channels) => console.log('channel', channels));

arena.channels.contents('channel-name', { per: 3 }).then((contents) => console.log('contents', contents));

arena.channels
  .create({ title: 'new channel name', status: 'public' })
  .then((channel) => console.log('result', channel));

arena.channels
  .update('current-channel-name', { title: 'updated channel name' })
  .then((channel) => console.log('result', channel));

arena.channels
  .delete('channel-name')
  .then(() => console.log('success'))
  .catch((error) => console.log(error.message));

arena.channels
  .createBlock('channel-name', { source: 'new title' })
  .then((channels) => console.log('result', channels));

arena.channels.collaborators('channel-name').then((users) => console.log('collaborators', users));

arena.channels
  .addCollaborators('channel-name', { ids: [12345] })
  .then((channels) => console.log('result', channels));

arena.channels
  .removeCollaborators('updated-channel-name', { ids: [12345] })
  .then((channels) => console.log('result', channels));

Types

Users

Property Type
id number
slug string
username string
first_name string
last_name string
avatar string
avatar_image AvatarImage | null
channel_count number
following_count number
profile_id number
follower_count number
class "User"
initials string
AvatarImage
Property Type
thumb string
display string
Following
Property Type
Following User[] | Channel[] | Block[]
UserResponse
Property Type
base_class "User"
channel_title string | null
class "User"
current_page number
length number
per number
total_pages number
FollowerResponse
Property Type
users User[]
base_class "User"
channel_title string | null
class "User"
current_page number
length number
per number
total_pages number
FollowingResponse
Property Type
following FollowingType
base_class "User"
channel_title string | null
class "User"
current_page number
length number
per number
total_pages number
UserChannelsResponse
Property Type
channels Channel[]
base_class "User"
channel_title string | null
class "User"
current_page number
length number
per number
total_pages number

Search

SearchResponse
Property Type
term string
users User[]
channels Channel[]
blocks Block[]
total_pages number
current_page number
per number
length number

Blocks

Block
Property Type
id number
title string | null
updated_at Date
created_at Date
state "Available" | "Failure" | "Procesed" | "Processing"
comment_count number
generated_title string
class "Image" | "Text" | "Link" | "Media" | "Attachment"
base_class "Block"
content string | null
content_html string | null
description string | null
description_html string | null
source null | { title?: string; url: string; provider: { name: string; url: string; } | null; }
image null | { content_type: string; display: { url: string }; filename: string; lage: { url: string }l original: { file_size: number; file_size_display: string; url: string; }; square: { url: string }; thumb: { url: string }; updated_at: Date; }
user User
connections? Channel[] | undefined
Connection
Property Type
length number
total_pages number
current_page number
per number
channel_title string | null
base_class "Channels"
class "Channel"
channels Channel[]
BlocksResponse
Property Type
length number
total_pages number
current_page number
per number
channel_title string | null
base_class "Block"
class "Text"
channels Channel[]
ChannelsResponse
Property Type
base_class "Block"
channel_title string | null
channels Channel[]
class "Image" | "Text" | "Link" | "Media" | "Attachment"
current_page number
length number
per number
total_pages number
BlockCreationData

Note: Either source or content is required, but not both.

Property Type
source string | undefined
content string | undefined
BlockUpdateData
Property Type
title? string | undefined
description? string | undefined
content? string | undefined

Channels

Contents
Property Type
contents Array<Block | Channel>
Channel
Property Type
id number
title string
created_at Date
updated_at Date
published boolean
open boolean
collaboration boolean
slug string
length number
kind string
status string
user_id number
class string
base_class string
user User
total_pages number
current_page number
per number
follower_count number
contents (Block | Channel)[]
collaborators User[]
BlockAttributes
Property Type
position number
selected boolean
connected_at Date
connected_by_user_id number
PaginationParams
Property Type
page? number
per? number
ChannelCreationData
Property Type
title string
status? 'public' | 'closed' | 'private'
CollaboratorData
Property Type
ids number[]
CollaboratorResponse
Property Type
channel_title string | null
current_page number
length number
per number
total_pages number
GetOrDeleteCollaboratorsResponse
Property Type
channel_title string | null
current_page number
length number
per number
total_pages number
users User[]
AddCollaboratorsResponse
Property Type
channel_title string | null
current_page number
length number
per number
total_pages number
collaborators User[]