JSPM

arena-typed

1.0.4
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 4
    • Score
      100M100P100Q42263F
    • License MIT

    Unofficial are.na API wrapper for TypeScript

    Package Exports

    • arena-typed
    • arena-typed/lib/index.js

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (arena-typed) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    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:

    • 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));
    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[]