arena-typed
v1.0.4
Published
Unofficial are.na API wrapper for TypeScript
Downloads
110
Maintainers
Readme
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:
- Create a new application on are.na
- Copy the value named
Personal access token
- Pass it to the
Arena
constructor ex.new Arena('your-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:
- users
- search
- blocks
- channels
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[] |