Class AnidbUDPClient

Hierarchy

  • EventEmitter
    • AnidbUDPClient

Constructors

  • Example

    import { AnidbUDPClient } from 'anidb-udp-client'
    const anidbClient = new AnidbUDPClient('someclientid', {debug: true})

    Parameters

    • Optional clientId: string

      client id, add your own here: https://anidb.net/software/add

    • Optional options: { cache?: AnidbCacheImplType; debug?: true; incomming_port?: number; logger?: false | AnidbLoggerType; ping_interval?: number }
      • Optional cache?: AnidbCacheImplType

        pass cache implementation: by default (undefined) it will use internal cache, that saves to {cwd}/.cache if set to false cache won't be used if instance of AnidbCacheImplType it will use that instead *

      • Optional debug?: true

        enable/disable debug logging

      • Optional incomming_port?: number

        the port to listen to for response (leave undefined if you are not sure)

      • Optional logger?: false | AnidbLoggerType

        Logger: default is using console.log, if false logging will be disabled, or pass a function

      • Optional ping_interval?: number

        define the interval in miliseconds at which anidb is pinged to keep the connection active, defaults to 5minutes

    Returns AnidbUDPClient

Properties

#pingTimer: undefined | Timeout
cache: AnidbCache
clientId: string
incomming_port: undefined | number
lastRequest: undefined | null | number
pingInterval: number
requestQueue: Bottleneck
#episodeParser: default<{ aid: NumberConstructor; aired: NumberConstructor; eid: NumberConstructor; eng: StringConstructor; epno: StringConstructor; kanji: StringConstructor; length: NumberConstructor; rating: NumberConstructor; romaji: StringConstructor; type: ((key: "1" | "2" | "3" | "6" | "4" | "5", ...args: unknown[]) => "" | "S" | "C" | "T" | "P" | "O"); votes: NumberConstructor }> = ...
#mylist_parser: default<{ aid: NumberConstructor; date: NumberConstructor; eid: NumberConstructor; fid: NumberConstructor; filestate: ((key: "0" | "1" | "2" | "10" | "11" | "12" | "13" | "14" | "15" | "100", ...args: unknown[]) => "other" | "normal/original" | "corrupted version/invalid crc" | "self edited" | "self ripped" | "on dvd" | "on vhs" | "on tv" | "in theaters" | "streamed"); gid: NumberConstructor; lid: NumberConstructor; other: ((value: string | number) => string); source: StringConstructor; state: ((key: "0" | "1" | "2" | "3" | "4", ...args: unknown[]) => "unknown" | "internal_storage" | "external_storage" | "deleted" | "remote_storage"); storage: StringConstructor; viewdate: NumberConstructor }> = ...
vote_types: { anime: "1"; anime_tmp: "2"; episode: "6"; group: "3" } = ...

Type declaration

  • anime: "1"
  • anime_tmp: "2"
  • episode: "6"
  • group: "3"

Events

EVENTS: { DISCONNECT: "disconnect" } = ...

valid events to listen to

Type declaration

  • DISCONNECT: "disconnect"

    on disconnect from udp connection

Connection Commands Methods

  • Start the connection to anidb. It will automatically log in if user and password is provided. This client will try to keep the session alive indefenetly, so make sure to call disconnect when you stop using. For long running services try to be clever and disconnect when there is no activity for a while.

    Example

    const anidb = new AnidbUDPClient('myclientid')
    await anidb.connect("my-user","my-password")
    await anidb.disconnect()

    Parameters

    • Optional user: string

      anidb user

    • Optional password: string

      anidb password

    • Optional udp_api_key: string

      UDP API Key (defined in the users profile), pass to enable encryption, must be set and match the one in the user account

    • Optional encoding: "ISO8859_1" | "ISO8859_2" | "ISO8859_4" | "ISO8859_5" | "ISO8859_7" | "ISO8859_9" | "ISO8859_13" | "ISO8859_15" | "KOI8_R" | "ASCII" | "UTF8" | "UnicodeBigUnmarked" | "UnicodeLittleUnmarked" | "Cp1250" | "Cp1251" | "Cp1252" | "Cp1253" | "Cp1254" | "Cp1257" | "UnicodeBig" | "UnicodeLittle" | "UTF16"

      set the encoding (only applies if user and password was passed)

    Returns Promise<undefined | { ip?: null | string; port?: null | string; session: string }>

  • Disconnect and logout

    Parameters

    • Optional source: any
    • Optional error: Error

    Returns Promise<void>

  • Change the encoding for future responses (reset on disconnect). Prefrably use the enc param of login instead.

    Deprecated

    Specify encoding with login or connect command

    Parameters

    • Optional encoding: "ISO8859_1" | "ISO8859_2" | "ISO8859_4" | "ISO8859_5" | "ISO8859_7" | "ISO8859_9" | "ISO8859_13" | "ISO8859_15" | "KOI8_R" | "ASCII" | "UTF8" | "UnicodeBigUnmarked" | "UnicodeLittleUnmarked" | "Cp1250" | "Cp1251" | "Cp1252" | "Cp1253" | "Cp1254" | "Cp1257" | "UnicodeBig" | "UnicodeLittle" | "UTF16"
    • Optional priority: number

    Returns Promise<void>

  • log into Anidb

    Parameters

    • user: string
    • pass: string
    • Optional encoding: "ISO8859_1" | "ISO8859_2" | "ISO8859_4" | "ISO8859_5" | "ISO8859_7" | "ISO8859_9" | "ISO8859_13" | "ISO8859_15" | "KOI8_R" | "ASCII" | "UTF8" | "UnicodeBigUnmarked" | "UnicodeLittleUnmarked" | "Cp1250" | "Cp1251" | "Cp1252" | "Cp1253" | "Cp1254" | "Cp1257" | "UnicodeBig" | "UnicodeLittle" | "UTF16"

    Returns Promise<{ ip?: null | string; port?: null | string; session: string }>

  • Logs the user out. Only very few commands can be used when logged out, and this library will stop tying to keep the session alive when logged out.

    Parameters

    • Optional priority: number

    Returns Promise<void>

  • To manually ping (the lib takes care of pinging every once in a while by it's own)

    Returns Promise<ParsedResponse>

Data Commands Methods

  • Return anime by title or aid

    Example

    const { romanji_name, episodes, aid } = await anidb.anime(3211,["romanji_name", "episodes"])
    

    Type Parameters

    • T extends "aid" | "year" | "type" | "romanji_name" | "kanji_name" | "english_name" | "short_name_list" | "synonym_list" | "dateflags" | "related_anime" | "related_types" | "other_name_list" | "episodes" | "highest_ep_number" | "special_ep_count" | "air_date" | "end_date" | "url" | "picname" | "rating" | "vote_count" | "temp_rating" | "temp_vote_count" | "average_review_rating" | "review_count" | "award_list" | "is_18_restricted" | "ann_id" | "allcinema_id" | "animenfo_id" | "tag_name_list" | "tag_id_list" | "tag_weight_list" | "date_record_updated" | "character_id_list" | "specials_count" | "credits_count" | "other_count" | "trailer_count" | "parody_count"

    Parameters

    • anime: string | number

      Anime title (any synonim) or anime id (aid)

    • Optional fields: T[]

      List of fields to to return.

    Returns Promise<Pick<AnimeResult, "aid" | T>>

  • get anime description by aid

    Parameters

    • aid: number

    Returns NullablePromise<string>

  • get calendar list

    Returns Promise<{ aid: number; dateflags: string[]; startdate: number }[]>

  • get character by character id

    Parameters

    • charid: number

    Returns Promise<{ anime_blocks: { aid: number; appearance: number; creatorid: number; is_main_seiyuu: boolean }[]; character_name_kanji: string; character_name_transc: string; charid: number; episode_list: number[]; gender: string; last_update_date: string; pic: string; type: number }>

  • get creator by creator id

    Parameters

    • creatorid: number

    Returns Promise<{ creator_name_kanji: string; creator_name_transcription: string; creatorid: number; last_update_date: number; pic_name: string; type: "person" | "company" | "collaboration"; url_english: string; url_japanese: string; wiki_url_english: string; wiki_url_japanese: string }>

  • get episode by episode id

    Parameters

    • eid: number

    Returns Promise<{ aid: number; aired: number; eid: number; eng: string; epno: string; kanji: string; length: number; rating: number; romaji: string; type: "" | "S" | "C" | "T" | "P" | "O"; votes: number }>

  • get episode by anime and episode number

    Parameters

    • anime: string | number

      anime title or anime id (aid)

    • epno: string

      episode number

    Returns Promise<{ aid: number; aired: number; eid: number; eng: string; epno: string; kanji: string; length: number; rating: number; romaji: string; type: "" | "S" | "C" | "T" | "P" | "O"; votes: number }>

  • Retrieve File Data by file id

    Type Parameters

    • T extends "aid" | "eid" | "gid" | "mylist_id" | "other_episodes" | "is_deprecated" | "state" | "size" | "ed2k" | "md5" | "sha1" | "crc32" | "video_color_depth" | "quality" | "source" | "audio_codecs" | "audio_bitrates" | "video_codec" | "video_bitrate" | "video_resolution" | "file_extension" | "dub_language" | "sub_language" | "length_seconds" | "description" | "aired_date" | "anidb_filename" | "mylist_state" | "mylist_filestate" | "mylist_viewed" | "mylist_viewdate" | "mylist_storage" | "mylist_source" | "mylist_other" | "anime_total_episodes" | "highest_episode" | "year" | "type" | "related_aid_list" | "related_aid_type" | "category_list" | "romanji_name" | "kanji_name" | "english_name" | "other_name" | "short_name_list" | "synonym_list" | "epno" | "ep_name" | "ep_romanji_name" | "ep_kanji_name" | "ep_rating" | "ep_vote_count" | "group_name" | "group_short_name" | "aid_record_updated" | "fid"

    Parameters

    • fid: number
    • fields: T[]

      list of fields to return

    Returns Promise<Pick<FileResult, "fid" | T>>

  • Retrieve File Data by anime, group and episode number

    Throws

    AnidbError with code RESPONSE_CODE.MULTIPLE_FILES_FOUND if more than one file is found. List of file ids will be in error.payload

    Type Parameters

    • T extends "aid" | "eid" | "gid" | "mylist_id" | "other_episodes" | "is_deprecated" | "state" | "size" | "ed2k" | "md5" | "sha1" | "crc32" | "video_color_depth" | "quality" | "source" | "audio_codecs" | "audio_bitrates" | "video_codec" | "video_bitrate" | "video_resolution" | "file_extension" | "dub_language" | "sub_language" | "length_seconds" | "description" | "aired_date" | "anidb_filename" | "mylist_state" | "mylist_filestate" | "mylist_viewed" | "mylist_viewdate" | "mylist_storage" | "mylist_source" | "mylist_other" | "anime_total_episodes" | "highest_episode" | "year" | "type" | "related_aid_list" | "related_aid_type" | "category_list" | "romanji_name" | "kanji_name" | "english_name" | "other_name" | "short_name_list" | "synonym_list" | "epno" | "ep_name" | "ep_romanji_name" | "ep_kanji_name" | "ep_rating" | "ep_vote_count" | "group_name" | "group_short_name" | "aid_record_updated" | "fid"

    Parameters

    • anime: string | number

      anime name or id

    • group: string | number

      group name or id

    • epno: string

      episode number

    • fields: T[]

      fields to return

    Returns Promise<Pick<FileResult, "fid" | T>>

  • Retrieve File Data by ed2k and size

    Type Parameters

    • T extends "aid" | "eid" | "gid" | "mylist_id" | "other_episodes" | "is_deprecated" | "state" | "size" | "ed2k" | "md5" | "sha1" | "crc32" | "video_color_depth" | "quality" | "source" | "audio_codecs" | "audio_bitrates" | "video_codec" | "video_bitrate" | "video_resolution" | "file_extension" | "dub_language" | "sub_language" | "length_seconds" | "description" | "aired_date" | "anidb_filename" | "mylist_state" | "mylist_filestate" | "mylist_viewed" | "mylist_viewdate" | "mylist_storage" | "mylist_source" | "mylist_other" | "anime_total_episodes" | "highest_episode" | "year" | "type" | "related_aid_list" | "related_aid_type" | "category_list" | "romanji_name" | "kanji_name" | "english_name" | "other_name" | "short_name_list" | "synonym_list" | "epno" | "ep_name" | "ep_romanji_name" | "ep_kanji_name" | "ep_rating" | "ep_vote_count" | "group_name" | "group_short_name" | "aid_record_updated" | "fid"

    Parameters

    • ed2k: string

      file ed2k hash

    • size: number

      size of file in bytes

    • fields: T[]

      list of fields to return

    Returns Promise<Pick<FileResult, "fid" | T>>

  • Retrieve Group Data

    Parameters

    • group: string | number

      group id or name

    Returns Promise<{ acount: number; dateflags: ("start_unknown_day" | "start_unknown_month" | "end_unknown_day" | "end_unkown_month" | "ended" | "start_unknown_year" | "end_unknown_year")[]; disbandeddate: number; fcount: number; foundeddate: number; gid: number; grouprelations: { othergroupid: number; relationtype: "participant_in" | "parent_of" | "merged_from" | "formerly" }[]; irc_channel: string; irc_server: string; lastactivitydate: number; lastreleasedate: number; name: string; picname: string; rating: number; short: string; url: string; votes: number }>

  • Returns a list of group names and ranges of episodes released by the group for a given anime.

    Parameters

    • aid: number

      anime id

    • Optional state: "ongoing" | "stalled" | "complete" | "dropped" | "finished" | "specials_only"

    Returns Promise<{ completition_state: "ongoing" | "stalled" | "complete" | "dropped" | "finished" | "specials_only"; episode_range: string; gid: number; group_name: string; last_episode_number: number; rating: number; votes: number }[]>

  • Returns a list of AniDB anime ids of anime that have been updated in in a given time frame, ordered by descending age (oldest to newest change). Either age is specified or time not both.

    Parameters

    • opts: { age: number } | { time: number }

    Returns Promise<{ last_update_date: number; total_count: number; updated_aids: number[] }>

Misc commands Methods

  • Will cancel any pending export request, queued either through UDP or the web server.

    Returns Promise<"EXPORT_CANCELLED">

  • Get user id

    Parameters

    • username: string

    Returns Promise<{ uid: number; username: string }>

  • Parameters

    • uid: number

    Returns Promise<{ uid: number; username: string }>

  • Get a random anime

    Parameters

    • type: "db" | "watched" | "unwatched" | "mylist"

    Returns Promise<{ aid: string; air_date: number; average_review_rating: number; categories: string[]; dateflags: ("start_unknown_day" | "start_unknown_month" | "end_unknown_day" | "end_unkown_month" | "ended" | "start_unknown_year" | "end_unknown_year")[]; end_date: number; english_name: string; episodes: number; highest_ep_number: number; is_18_restricted: boolean; kanji_name: string; other_name_list: string[]; picname: string; rating: number; review_count: number; romanji_name: string; short_name_list: string[]; special_ep_count: number; synonym_list: string[]; temp_rating: number; temp_vote_count: number; type: string; vote_count: number; year: string }>

  • Queues a MyList Export by the AniDB Servers. As with a manual export request, exports are only done during periods when server load is low. As a result, exports may take up to 24 hours. The client submitting the request will receive an AniDB message when the export is ready to be collected. Only one export can be in the queue at a time.

    Parameters

    • template: "csv-adborg" | "csv-files" | "csv-minimal" | "html-anidbstyle" | "html-cleancut" | "html-cloud" | "html-dump" | "html-fixme" | "html-fstyle" | "html-goldsilver" | "html-graywhite" | "html-green" | "html-knch" | "html-lightblue" | "html-operatic" | "html-orangewhite" | "html-silver" | "json-adborg" | "json-large" | "plot-time-wasted" | "sfv-simple" | "txt-ed2k" | "txt-udp-mylist" | "xml" | "xml-acm" | "xml-anivote" | "xml-cdb" | "xml-dark" | "xml-files" | "xml-large" | "xml-mini" | "xml-mystatus" | "xml-naive" | "xml-nx" | "xml-plain" | "xml-plain-anisubtwo" | "xml-plain-cs" | "xml-plain-full" | "xml-plain-new" | "xml-xslt"

    Returns Promise<"EXPORT_QUEUED">

  • Send Message

    Parameters

    • username: string
    • title: string
    • body: string

    Returns Promise<string>

My List Commands Methods

  • Add MyList entry by anime. Can be used to update and exiting entry by passing options.edit=true

    Throws

    AnidbError see codes at Add_file_to_MyList

    Parameters

    • animeinfo: { anime: string | number; epno?: number; group?: string | number }
      • anime: string | number

        anime name or id

      • Optional epno?: number

        Episode number, epno=0 means all episodes (default), negative numbers means upto. (-12 -> upto 12)

      • Optional group?: string | number

        group name or id. Optional: if not defined generic file will be added to mylist

    • Optional options: { edit?: boolean; other?: string; source?: string; state?: "unknown" | "internal_storage" | "external_storage" | "deleted" | "remote_storage"; storage?: string; viewdate?: number; viewed?: boolean }

      My list entry options

      • Optional edit?: boolean

        true to edit a MyList entry instead of creating a new one. When editing, optional values that are not supplied retain their original value. That is, they are not replaced with default or empty values. Only values supplied are updated.

      • Optional other?: string

        other remarks/notes (<br/> can be used to split into multiple lines)

      • Optional source?: string

        (i.e. ed2k, dc, ftp, irc, ...)

      • Optional state?: "unknown" | "internal_storage" | "external_storage" | "deleted" | "remote_storage"
      • Optional storage?: string

        label of the storage

      • Optional viewdate?: number
      • Optional viewed?: boolean

    Returns Promise<{ added: number }>

  • Add MyList entry by file. Either by file id, ed2k+size, mylist id. Can be used to update and exiting entry by passing options.edit=true

    Throws

    AnidbError with code RESPONSE_CODE.FILE_ALREADY_IN_MYLIST if not edit=true. Mylist entry (same result as mylist_by_file_id result) will be in error.payload

    Parameters

    • fileinfo: { fid: number } | { ed2k: string; size: number } | { lid: number }

      file to add to mylist, pass { fid } (file id) or { ed2k, size } (ed2k hash and size in bytes) or { lid } (mylist id) to edit

    • Optional options: { edit?: boolean; other?: string; source?: string; state?: "unknown" | "internal_storage" | "external_storage" | "deleted" | "remote_storage"; storage?: string; viewdate?: number; viewed?: boolean }

      My list entry options

      • Optional edit?: boolean

        true to edit a MyList entry instead of creating a new one. When editing, optional values that are not supplied retain their original value. That is, they are not replaced with default or empty values. Only values supplied are updated. When lid is passed is automattically set to true and option ignored

      • Optional other?: string

        other remarks/notes (<br/> can be used to split into multiple lines)

      • Optional source?: string

        (i.e. ed2k, dc, ftp, irc, ...)

      • Optional state?: "unknown" | "internal_storage" | "external_storage" | "deleted" | "remote_storage"
      • Optional storage?: string

        label of the storage

      • Optional viewdate?: number
      • Optional viewed?: boolean

    Returns Promise<undefined | { code: "MYLIST_ENTRY_ADDED"; lid: number } | { code: "MYLIST_ENTRY_EDITED"; nr_edited: number }>

  • Retrieve MyList entry by anime. Can return either a single result { single: ... } or muliple result { multi: ... }. See type definition.

    Parameters

    • anime: string | number

      anime name or id

    • Optional group: string | number

      group name or id

    • Optional epno: number

      episode number

    Returns Promise<undefined | { multi: undefined; single: { aid: number; date: number; eid: number; fid: number; filestate: "other" | "normal/original" | "corrupted version/invalid crc" | "self edited" | "self ripped" | "on dvd" | "on vhs" | "on tv" | "in theaters" | "streamed"; gid: number; lid: number; other: string; source: string; state: "unknown" | "internal_storage" | "external_storage" | "deleted" | "remote_storage"; storage: string; viewdate: number } } | { multi: { anime_title: string; episodes: number; eps_cd: string; eps_deleted: string; eps_hdd: string; eps_unkown: string; eps_watiched: string; groups: { episodes: string; group: string }[] }; single: undefined }>

  • Retrieve MyList entry by file ed2khash and size

    Parameters

    • ed2k: string

      hash

    • size: number

      in bytes

    Returns Promise<{ aid: number; date: number; eid: number; fid: number; filestate: "other" | "normal/original" | "corrupted version/invalid crc" | "self edited" | "self ripped" | "on dvd" | "on vhs" | "on tv" | "in theaters" | "streamed"; gid: number; lid: number; other: string; source: string; state: "unknown" | "internal_storage" | "external_storage" | "deleted" | "remote_storage"; storage: string; viewdate: number }>

  • Retrieve MyList entry by file id

    Parameters

    • fid: number

      file id

    Returns Promise<{ aid: number; date: number; eid: number; fid: number; filestate: "other" | "normal/original" | "corrupted version/invalid crc" | "self edited" | "self ripped" | "on dvd" | "on vhs" | "on tv" | "in theaters" | "streamed"; gid: number; lid: number; other: string; source: string; state: "unknown" | "internal_storage" | "external_storage" | "deleted" | "remote_storage"; storage: string; viewdate: number }>

  • Returns

    Parameters

    • lid: number

      Retrieve MyList Data

    Returns Promise<{ aid: number; date: number; eid: number; fid: number; filestate: "other" | "normal/original" | "corrupted version/invalid crc" | "self edited" | "self ripped" | "on dvd" | "on vhs" | "on tv" | "in theaters" | "streamed"; gid: number; lid: number; other: string; source: string; state: "unknown" | "internal_storage" | "external_storage" | "deleted" | "remote_storage"; storage: string; viewdate: number }>

  • Remove MyList entries by anime.

    Throws

    AnidbError see codes at Add_file_to_MyList

    Parameters

    • animeinfo: { anime: string | number; epno: number; group?: string | number }
      • anime: string | number

        anime name or id

      • epno: number

        Episode number (negative numbers and 0 do not work), and epno is required

      • Optional group?: string | number

        group name or id. Optional

    Returns Promise<{ removed: number }>

  • Removes MyList entry by file. Either by file id, ed2k+size, mylist id.

    Throws

    AnidbError with code RESPONSE_CODE.FILE_ALREADY_IN_MYLIST if not edit=true. Mylist entry (same result as mylist_by_file_id result) will be in error.payload

    Throws

    AnidbError see codes at Add_file_to_MyList

    Parameters

    • fileinfo: { fid: number } | { ed2k: string; size: number } | { lid: number }

      file to add to mylist, pass { fid } (file id) or { ed2k, size } (ed2k hash and size in bytes) or { lid } (mylist id) to edit

    Returns Promise<{ removed: number }>

  • Retrieve MyList stats

    Returns Promise<{ added_animes: string; added_eps: string; added_files: string; added_groups: string; anime: string; eps: string; files: string; glory_perc: string; leech_perc: string; mylist_perc: string; reviews: string; size_of_files: string; viewed_mylist_perc: string; viewed_nr_eps: string; viewed_perc: string; views_in_min: string; votes: string }>

  • Vote for specified anime/episode/group

    Throws

    AnidbError with code RESPONSE_CODE.NO_SUCH_VOTE, PERMVOTE_NOT_ALLOWED, ALREADY_PERMVOTED with payload same as the normal response

    Throws

    AnidbError see codes at Vote_for_specified_anime/episode/group

    Parameters

    • type: "group" | "anime" | "anime_tmp" | "episode"

      type of vote: anime vote, anime temporary vote, vote for a group, vote for episode

    • name_or_id: string | number

      identifier to vote for, can be a name or the id (of the type provided)

    • vote: number | "get" | "revoke"

      Must be 'get' or 'revoke' or a number between 100 and 1000

    Returns Promise<{ action: "VOTED" | "VOTE_FOUND" | "VOTE_UPDATED" | "VOTE_REVOKED"; code: 260 | 261 | 262 | 263; id: number; name: string; type: "group" | "anime" | "anime_tmp" | "episode"; vote_value: number }>

Other Methods

  • Parameters

    • command: string
    • Optional params: Record<string | number, string | number>
    • Optional expected_responses: (string | number)[]
    • Optional priority: number

    Returns Promise<ParsedResponse>

Generated using TypeDoc