e621 2.0.3 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/.mocharc.json +6 -0
  2. package/.ncurc.json +3 -0
  3. package/Features/Artists.md +34 -0
  4. package/Features/E621SearchInconsistencies.md +51 -0
  5. package/Features/FuturePlans.md +47 -0
  6. package/Features/Pools.md +33 -0
  7. package/Features/PostSets.md +32 -0
  8. package/Features/Posts.md +40 -0
  9. package/Features/README.md +12 -0
  10. package/Features/Tags.md +28 -0
  11. package/Features/UserFeedback.md +28 -0
  12. package/Features/Users.md +32 -0
  13. package/Features/WikiPages.md +31 -0
  14. package/README.md +1 -94
  15. package/build/package.json +12 -4
  16. package/build/src/index.d.ts +10 -5
  17. package/build/src/index.js +14 -6
  18. package/build/src/modules/Artists.d.ts +17 -3
  19. package/build/src/modules/Artists.js +49 -4
  20. package/build/src/modules/Pools.d.ts +2 -0
  21. package/build/src/modules/Pools.js +3 -1
  22. package/build/src/modules/PostSets.d.ts +14 -0
  23. package/build/src/modules/PostSets.js +30 -4
  24. package/build/src/modules/Posts.d.ts +16 -2
  25. package/build/src/modules/Posts.js +37 -3
  26. package/build/src/modules/Tags.d.ts +63 -0
  27. package/build/src/modules/Tags.js +149 -0
  28. package/build/src/modules/UserFeedback.d.ts +1 -1
  29. package/build/src/modules/UserFeedback.js +4 -2
  30. package/build/src/modules/Users.d.ts +8 -1
  31. package/build/src/modules/Users.js +15 -3
  32. package/build/src/structures/Pool.d.ts +1 -1
  33. package/build/src/structures/Pool.js +2 -2
  34. package/build/src/structures/PoolHistory.d.ts +4 -3
  35. package/build/src/structures/PoolHistory.js +2 -1
  36. package/build/src/structures/PostApproval.d.ts +25 -0
  37. package/build/src/structures/PostApproval.js +33 -0
  38. package/build/src/structures/PostHistory.d.ts +5 -5
  39. package/build/src/structures/PostHistory.js +3 -3
  40. package/build/src/structures/Tag.d.ts +60 -0
  41. package/build/src/structures/Tag.js +87 -0
  42. package/build/src/structures/TagHistory.d.ts +27 -0
  43. package/build/src/structures/TagHistory.js +36 -0
  44. package/build/src/types/artists.d.ts +6 -0
  45. package/build/src/types/index.d.ts +1 -0
  46. package/build/src/types/pools.d.ts +5 -4
  47. package/build/src/types/posts.d.ts +21 -7
  48. package/build/src/types/tags.d.ts +47 -0
  49. package/build/src/types/users.d.ts +1 -1
  50. package/build/src/types/wiki_pages.d.ts +1 -1
  51. package/build/src/util/Debug.d.ts +1 -0
  52. package/build/src/util/Debug.js +11 -0
  53. package/build/src/util/FormHelper.js +2 -2
  54. package/build/src/util/RequestHandler.d.ts +3 -2
  55. package/build/src/util/RequestHandler.js +26 -3
  56. package/build/src/util/Timer.d.ts +6 -0
  57. package/build/src/util/Timer.js +71 -0
  58. package/package.json +12 -4
package/.mocharc.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "bail": true,
3
+ "require": "ts-node/register",
4
+ "timeout": 20000,
5
+ "spec": "test/**/*.ts"
6
+ }
package/.ncurc.json ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "upgrade": true
3
+ }
@@ -0,0 +1,34 @@
1
+ ## Table Of Contents
2
+ - [Index](README.md)
3
+ - [Future Plans](FuturePlans.md)
4
+ - [E621 Search Inconsistencies](E621SearchInconsistencies.md)
5
+ - **Artists**
6
+ - [Pools](Pools.md)
7
+ - [Posts](Posts.md)
8
+ - [Post Sets](PostSets.md)
9
+ - [Tags](Tags.md)
10
+ - [User Feedback](UserFeedback.md)
11
+ - [Users](Users.md)
12
+ - [Wiki Pages](WikiPages.md)
13
+
14
+ <hr>
15
+
16
+ | Feature | Implemented | Method |
17
+ |:------------------:|:-----------:|:-----------------------:|
18
+ | Get By ID | ✔️ | `artists.get` |
19
+ | Get By Name | ✔️ | `artists.getByName` |
20
+ | Search | ✔️ | `artists.search` |
21
+ | Create[^1] | ✔️ | `artists.create` |
22
+ | Modify[^1] | ✔️ | `artists.modify` |
23
+ | Delete[^1][^3] | ✔️ | `artists.delete` |
24
+ | Ban[^1][^5] | ✖️ | N/A |
25
+ | Unban[^1][^5] | ✖️ | N/A |
26
+ | Revert[^1] | ✔️ | `artists.revert` |
27
+ | Search History[^1] | ✔️ | `artists.searchHistory` |
28
+ | Get DNP List | ✔️ | `artists.getDoNotPost` |
29
+
30
+ [^1]: Requires Authentication
31
+ [^2]: Requires Privileged
32
+ [^3]: Requires Janitor
33
+ [^4]: Requires Moderator
34
+ [^5]: Requires Admin
@@ -0,0 +1,51 @@
1
+ ## Table Of Contents
2
+ - [Index](README.md)
3
+ - [Future Plans](FuturePlans.md)
4
+ - **E621 Search Inconsistencies**
5
+ - [Artists](Artists.md)
6
+ - [Pools](Pools.md)
7
+ - [Posts](Posts.md)
8
+ - [Post Sets](PostSets.md)
9
+ - [Tags](Tags.md)
10
+ - [User Feedback](UserFeedback.md)
11
+ - [Users](Users.md)
12
+ - [Wiki Pages](WikiPages.md)
13
+
14
+ h3. Some of E621's searches are inconsistent with the rest of the site, as such some methods might randomly error if some route doesn't follow standard practices.
15
+
16
+ Below is a table of all of the routes I can currently think of and what they return
17
+
18
+ | | Object (No Results) | Array (No Results) | Object (With Results) | Array (With Results) |
19
+ |:----------------------:|:-------------------:|:------------------:|:---------------------:|:--------------------:|
20
+ | `posts` | ✔️ | | ✔️ | |
21
+ | `post_disapprovals` | ✔️ | | [^1] | [^1] |
22
+ | `post_versions`[^2] | ✖️ | ✖️ | | ✔️ |
23
+ | `post_approvals` | ✔️ | | | ✔️ |
24
+ | `post_flags` | ✔️ | | | ✔️ |
25
+ | `notes` | ✔️ | | | ✔️ |
26
+ | `note_versions` | ✔️ | | | ✔️ |
27
+ | `pools` | | ✔️ | | ✔️ |
28
+ | `pool_versions`[^2] | ✖️ | ✖️ | | ✔️ |
29
+ | `wiki_pages` | | ✔️ | | ✔️ |
30
+ | `wiki_page_versions` | ✔️ | | | ✔️ |
31
+ | `artists` | | ✔️ | | ✔️ |
32
+ | `artist_versions` | ✔️ | | | ✔️ |
33
+ | `tags` | ✔️ | | | ✔️ |
34
+ | `tag_type_versions` | ✔️ | | | ✔️ |
35
+ | `tag_aliases` | ✔️ | | | ✔️ |
36
+ | `tag_implications` | ✔️ | | | ✔️ |
37
+ | `bulk_update_requests` | ✔️ | | | ✔️ |
38
+ | `blips` | ✔️ | | | ✔️ |
39
+ | `takedowns` | ✔️ | | | ✔️ |
40
+ | `users` | | ✔️ | | ✔️ |
41
+ | `user_feedbacks` | ✔️ | | | ✔️ |
42
+ | `forum_topics` | | ✔️ | | ✔️ |
43
+ | `post_sets` | ✔️ | | | ✔️ |
44
+ | `comments`[^3] | ✖️ | ✖️ | ✖️ | ✖️ |
45
+
46
+ [^1]: untested
47
+ [^2]: these error when attempting to search for something that has no results
48
+ [^3]: `/comments.json` seems to return `/posts.json` results , with most search parameters returning errors.
49
+
50
+
51
+ I've [submitted an issue](https://github.com/zwagoth/e621ng/issues/359) to E621 to see if they have any plans to do something about this. If you find something erroring when you believe it shouldn't (something like `reading property map of undefined`), let us know via an [issue](https://github.com/DonovanDMC/E621/issues/new).
@@ -0,0 +1,47 @@
1
+ ## Table Of Contents
2
+ - [Index](README.md)
3
+ - **Future Plans**
4
+ - [E621 Search Inconsistencies](E621SearchInconsistencies.md)
5
+ - [Artists](Artists.md)
6
+ - [Pools](Pools.md)
7
+ - [Posts](Posts.md)
8
+ - [Post Sets](PostSets.md)
9
+ - [Tags](Tags.md)
10
+ - [User Feedback](UserFeedback.md)
11
+ - [Users](Users.md)
12
+ - [Wiki Pages](WikiPages.md)
13
+
14
+ <hr>
15
+
16
+ | Feature | Planned |
17
+ |:-------------------------------------------------------------------:|:-------:|
18
+ | [Post Flags](https://e621.net/post_flags) | ✔️ |
19
+ | [Blips](https://e621.net/blips) | ✔️ |
20
+ | [Takedowns](https://e621.net/takedowns) | ✔️ |
21
+ | [Bulk Update Requests](https://e621.net/bulk_update_requests) | ✔️ |
22
+ | [Tag Implications](https://e621.net/tag_implications) | ✔️ |
23
+ | [Tag Aliases](https://e621.net/tag_aliases) | ✔️ |
24
+ | [Notes](https://e621.net/notes) | ✔️ |
25
+ | [Note History](https://e621.net/note_versions) | ✔️ |
26
+ | [Forum Topics](https://e621.net/forum_topics) | ✔️ |
27
+ | [Comments](https://e621.net/comments) | ✔️ |
28
+ | [Popular Posts](https://e621.net/explore/posts/popular) | ✔️ |
29
+ | [IQDB](https://e621.net/iqdb_queries) | ✔️ |
30
+ | [Upload Whitelists](https://e621.net/upload_whitelists) | ✔️ |
31
+ | [Post Events](https://e621.net/posts/2907536/events)[^3] | ✔️ |
32
+ | [Email Blacklists](https://e621.net/email_blacklists)[^2] | ✔️ |
33
+ | [IP Bans](https://e621.net/ip_bans)[^2] | ✔️ |
34
+ | [Dmails](https://e621.net/dmails)[^1] | ✖️ |
35
+ | [Mod Actions](https://e621.net/mod_actions)[^1] | ✖️ |
36
+ | [Tickets](https://e621.net/tickets)[^1] | ✖️ |
37
+ | [User Bans](https://e621.net/bans)[^1] | ✖️ |
38
+ | [Deleted Posts](https://e621.net/deleted_posts)[^1] | ✖️ |
39
+ | [Post Replacements](https://e621.net/post_replacements)[^1] | ✖️ |
40
+ | [Stats](https://e621.net/stats)[^1] | ✖️ |
41
+ | [Post Report Reasons](https://e621.net/post_report_reasons)[^1][^2] | ✖️ |
42
+ | [Post Appeals](https://e621.net/post_appeals)[^2][^4] | ✖️ |
43
+
44
+ [^1]: E621 does not expose a json api for these, and I will not scrape the html of the page, as this will add serious bloat to the library, and is not something e621 wants us to do.
45
+ [^2]: These require a higher user level than [b]Privileged[/b] (which is what I have on e621), so implementing requires hosting a local instance, and is generally slower to do.
46
+ [^3]: This feature is not documented and is subject to change soon (see [this pull request](https://github.com/zwagoth/e621ng/issues/346))
47
+ [^4]: This feature is unused and is planned to be removed (see [this pull request](https://github.com/zwagoth/e621ng/pull/357))
@@ -0,0 +1,33 @@
1
+ ## Table Of Contents
2
+ - [Index](README.md)
3
+ - [Future Plans](FuturePlans.md)
4
+ - [E621 Search Inconsistencies](E621SearchInconsistencies.md)
5
+ - [Artists](Artists.md)
6
+ - **Pools**
7
+ - [Posts](Posts.md)
8
+ - [Post Sets](PostSets.md)
9
+ - [Tags](Tags.md)
10
+ - [User Feedback](UserFeedback.md)
11
+ - [Users](Users.md)
12
+ - [Wiki Pages](WikiPages.md)
13
+
14
+ <hr>
15
+
16
+ | Feature | Implemented | Method |
17
+ |:------------------:|:-----------:|:---------------------:|
18
+ | Get By ID | ✔️ | `pools.get` |
19
+ | Get By Name | ✔️ | `pools.getByName` |
20
+ | Search | ✔️ | `pools.search` |
21
+ | Create[^1] | ✔️ | `pools.create` |
22
+ | Modify[^1] | ✔️ | `pools.modify` |
23
+ | Delete[^1][^3] | ✔️ | `pools.delete` |
24
+ | Revert[^1] | ✔️ | `pools.revert` |
25
+ | Search History[^1] | ✔️ | `pools.searchHistory` |
26
+ | Add Post[^1] | ✔️ | `pools.addPost` |
27
+ | Remove Post[^1] | ✔️ | `pools.removePost` |
28
+
29
+ [^1]: Requires Authentication
30
+ [^2]: Requires Privileged
31
+ [^3]: Requires Janitor
32
+ [^4]: Requires Moderator
33
+ [^5]: Requires Admin
@@ -0,0 +1,32 @@
1
+ ## Table Of Contents
2
+ - [Index](README.md)
3
+ - [Future Plans](FuturePlans.md)
4
+ - [E621 Search Inconsistencies](E621SearchInconsistencies.md)
5
+ - [Artists](Artists.md)
6
+ - [Pools](Pools.md)
7
+ - [Posts](Posts.md)
8
+ - **Post Sets**
9
+ - [Tags](Tags.md)
10
+ - [User Feedback](UserFeedback.md)
11
+ - [Users](Users.md)
12
+ - [Wiki Pages](WikiPages.md)
13
+
14
+ <hr>
15
+
16
+ | Feature | Implemented | Method |
17
+ |:-----------------:|:-----------:|:-------------------------:|
18
+ | Get By ID | ✔️ | `postSets.get` |
19
+ | Get By Name | ✔️ | `postSets.getByName` |
20
+ | Get By Short Name | ✔️ | `postSets.getByShortName` |
21
+ | Search | ✔️ | `postSets.search` |
22
+ | Create[^1] | ✔️ | `postSets.create` |
23
+ | Modify[^1] | ✔️ | `postSets.modify` |
24
+ | Delete[^1] | ✔️ | `postSets.delete` |
25
+ | Add Post[^1] | ✔️ | `postSets.addPost` |
26
+ | Remove Post[^1] | ✔️ | `postSets.removePost` |
27
+
28
+ [^1]: Requires Authentication
29
+ [^2]: Requires Privileged
30
+ [^3]: Requires Janitor
31
+ [^4]: Requires Moderator
32
+ [^5]: Requires Admin
@@ -0,0 +1,40 @@
1
+ ## Table Of Contents
2
+ - [Index](README.md)
3
+ - [Future Plans](FuturePlans.md)
4
+ - [E621 Search Inconsistencies](E621SearchInconsistencies.md)
5
+ - [Artists](Artists.md)
6
+ - [Pools](Pools.md)
7
+ - **Posts**
8
+ - [Post Sets](PostSets.md)
9
+ - [Tags](Tags.md)
10
+ - [User Feedback](UserFeedback.md)
11
+ - [Users](Users.md)
12
+ - [Wiki Pages](WikiPages.md)
13
+
14
+ <hr>
15
+
16
+ | Feature | Implemented | Method |
17
+ |:-----------------------------:|:-----------:|:---------------------------:|
18
+ | Get By ID | ✔️ | `posts.get` |
19
+ | Get By Name | ✔️ | `posts.getByName` |
20
+ | Search | ✔️ | `posts.search` |
21
+ | Create[^1] | ✔️ | `posts.create` |
22
+ | Modify[^1] | ✔️ | `posts.modify` |
23
+ | Delete[^1][^3] | ✖️ | N/A |
24
+ | Approve[^1][^3] | ✖️ | N/A |
25
+ | Unapprove[^1][^3] | ✖️ | N/A |
26
+ | Destroy[^1][^5] | ✖️ | N/A |
27
+ | Regenerate Thumbnails[^1][^3] | ✖️ | N/A |
28
+ | Regenerate Videos[^1][^3] | ✖️ | N/A |
29
+ | Revert[^1] | ✔️ | `posts.revert` |
30
+ | Search History[^1] | ✔️ | `posts.searchHistory` |
31
+ | Vote[^1] | ✔️ | `posts.vote` |
32
+ | Add Favorite[^1] | ✔️ | `users.addFavorite` |
33
+ | Remove Favorite[^1] | ✔️ | `users.removeFavorite` |
34
+ | Search Post Approvals | ✔️ | `posts.searchPostApprovals` |
35
+
36
+ [^1]: Requires Authentication
37
+ [^2]: Requires Privileged
38
+ [^3]: Requires Janitor
39
+ [^4]: Requires Moderator
40
+ [^5]: Requires Admin
@@ -0,0 +1,12 @@
1
+ ## Table Of Contents
2
+ - **Index**
3
+ - [Future Plans](FuturePlans.md)
4
+ - [E621 Search Inconsistencies](E621SearchInconsistencies.md)
5
+ - [Artists](Artists.md)
6
+ - [Pools](Pools.md)
7
+ - [Posts](Posts.md)
8
+ - [Post Sets](PostSets.md)
9
+ - [Tags](Tags.md)
10
+ - [User Feedback](UserFeedback.md)
11
+ - [Users](Users.md)
12
+ - [Wiki Pages](WikiPages.md)
@@ -0,0 +1,28 @@
1
+ ## Table Of Contents
2
+ - [Index](README.md)
3
+ - [Future Plans](FuturePlans.md)
4
+ - [E621 Search Inconsistencies](E621SearchInconsistencies.md)
5
+ - [Artists](Artists.md)
6
+ - [Pools](Pools.md)
7
+ - [Posts](Posts.md)
8
+ - [Post Sets](PostSets.md)
9
+ - **Tags**
10
+ - [User Feedback](UserFeedback.md)
11
+ - [Users](Users.md)
12
+ - [Wiki Pages](WikiPages.md)
13
+
14
+ <hr>
15
+
16
+ | Feature | Implemented | Method |
17
+ |:--------------:|:-----------:|:--------------------:|
18
+ | Get By ID | ✔️ | `tags.get` |
19
+ | Get By Name | ✔️ | `tags.getByName` |
20
+ | Search | ✔️ | `tags.search` |
21
+ | Modify[^1] | ✔️ | `tags.modify` |
22
+ | Search History | ✔️ | `tags.searchHistory` |
23
+
24
+ [^1]: Requires Authentication
25
+ [^2]: Requires Privileged
26
+ [^3]: Requires Janitor
27
+ [^4]: Requires Moderator
28
+ [^5]: Requires Admin
@@ -0,0 +1,28 @@
1
+ ## Table Of Contents
2
+ - [Index](README.md)
3
+ - [Future Plans](FuturePlans.md)
4
+ - [E621 Search Inconsistencies](E621SearchInconsistencies.md)
5
+ - [Artists](Artists.md)
6
+ - [Pools](Pools.md)
7
+ - [Posts](Posts.md)
8
+ - [Post Sets](PostSets.md)
9
+ - [Tags](Tags.md)
10
+ - **User Feedback**
11
+ - [Users](Users.md)
12
+ - [Wiki Pages](WikiPages.md)
13
+
14
+ <hr>
15
+
16
+ | Feature | Implemented | Method |
17
+ |:--------------:|:-----------:|:---------------------:|
18
+ | Get By ID | ✔️ | `userFeedback.get` |
19
+ | Search | ✔️ | `userFeedback.search` |
20
+ | Create[^1][^4] | ✔️ | `userFeedback.create` |
21
+ | Modify[^1][^4] | ✔️ | `userFeedback.modify` |
22
+ | Delete[^1][^4] | ✔️ | `userFeedback.delete` |
23
+
24
+ [^1]: Requires Authentication
25
+ [^2]: Requires Privileged
26
+ [^3]: Requires Janitor
27
+ [^4]: Requires Moderator
28
+ [^5]: Requires Admin
@@ -0,0 +1,32 @@
1
+ ## Table Of Contents
2
+ - [Index](README.md)
3
+ - [Future Plans](FuturePlans.md)
4
+ - [E621 Search Inconsistencies](E621SearchInconsistencies.md)
5
+ - [Artists](Artists.md)
6
+ - [Pools](Pools.md)
7
+ - [Posts](Posts.md)
8
+ - [Post Sets](PostSets.md)
9
+ - [Tags](Tags.md)
10
+ - [User Feedback](UserFeedback.md)
11
+ - **Users**
12
+ - [Wiki Pages](WikiPages.md)
13
+
14
+ <hr>
15
+
16
+ | Feature | Implemented | Method |
17
+ |:---------------------------:|:-----------:|:----------------------:|
18
+ | Get By ID | ✔️ | `users.get` |
19
+ | Get By Name | ✔️ | `users.getByName` |
20
+ | Search | ✔️ | `users.search` |
21
+ | Get Authenticated User[^1] | ✔️ | `users.getSelf` |
22
+ | Edit Authenticated User[^1] | ✔️ | `users.editSelf` |
23
+ | Get Upload Limit[^1] | ✔️ | `users.getUploadLimit` |
24
+ | Get Favorites[^1] | ✔️ | `users.getFavorites` |
25
+ | Add Favorite[^1] | ✔️ | `users.addFavorite` |
26
+ | Remove Favorite[^1] | ✔️ | `users.removeFavorite` |
27
+
28
+ [^1]: Requires Authentication
29
+ [^2]: Requires Privileged
30
+ [^3]: Requires Janitor
31
+ [^4]: Requires Moderator
32
+ [^5]: Requires Admin
@@ -0,0 +1,31 @@
1
+ ## Table Of Contents
2
+ - [Index](README.md)
3
+ - [Future Plans](FuturePlans.md)
4
+ - [E621 Search Inconsistencies](E621SearchInconsistencies.md)
5
+ - [Artists](Artists.md)
6
+ - [Pools](Pools.md)
7
+ - [Posts](Posts.md)
8
+ - [Post Sets](PostSets.md)
9
+ - [Tags](Tags.md)
10
+ - [User Feedback](UserFeedback.md)
11
+ - [Users](Users.md)
12
+ - **Wiki Pages**
13
+
14
+ <hr>
15
+
16
+ | Feature | Implemented | Method |
17
+ |:--------------:|:-----------:|:-------------------------:|
18
+ | Get By ID | ✔️ | `wikiPages.get` |
19
+ | Get By Title | ✔️ | `wikiPages.getByTitle` |
20
+ | Search | ✔️ | `wikiPages.search` |
21
+ | Create[^1] | ✔️ | `wikiPages.create` |
22
+ | Modify[^1] | ✔️ | `wikiPages.modify` |
23
+ | Delete[^1][^3] | ✔️ | `wikiPages.delete` |
24
+ | Revert[^1] | ✔️ | `wikiPages.revert` |
25
+ | Search History | ✔️ | `wikiPages.searchHistory` |
26
+
27
+ [^1]: Requires Authentication
28
+ [^2]: Requires Privileged
29
+ [^3]: Requires Janitor
30
+ [^4]: Requires Moderator
31
+ [^5]: Requires Admin
package/README.md CHANGED
@@ -4,25 +4,7 @@ The most comprehensive wrapper for e621 you'll ever find.
4
4
 
5
5
  We support almost anything normal users can do, with plans to bring everything else in, and more later in development.
6
6
 
7
- ### Features:
8
- - [x] Creating Posts (Buffer & URL)
9
- - [x] Listing/Creating/Editing/Voting On/Favoriting Posts
10
- - [x] Listing/Creating/Editing/Deleting/Adding To/Removing From Post Sets
11
- - [x] Listing/Creating/Editing/Deleting/Adding To/Removing From Pools
12
- - [x] Listing/Creating/Editing/Deleting Wiki Pages
13
- - [x] Listing/Creating/Editing/Deleting Artists
14
- - [x] Listing/Creating/Deleting/Editing User Feedback
15
- - [x] Reverting Pool Changes
16
- - [x] Listing Post History
17
- - [x] Editing The Authenticated User (all properties minus password and email)
18
- - [ ] Deleting/Approving/Unapproving/Destroying Posts
19
- - [ ] Creating/Solving/Deleting Post Flags
20
- - [ ] Listing/Editing/Deleting Tags
21
- - [ ] General Janitorial/Moderative/Admninistrative Actions
22
- - [ ] More Planned!
23
-
24
- ### Not Planned:
25
- - Dmails (routes do not support json, and I'm not scraping html)
7
+ See the [Features List](Features/README.md) for all of the things this module supports, and what is planned.
26
8
 
27
9
  <hr>
28
10
 
@@ -55,78 +37,3 @@ Most of these options shouldn't be used unless you know what you're doing (you p
55
37
  | `instanceSSL` | Boolean | true | [See Code](https://github.com/DonovanDMC/E621/blob/89d662f19dc76c77e28f40b18a96f9043c4e2a3a/src/types/index.d.ts#L03) |
56
38
  | `instancePort` | Number | 443 | [See Code](https://github.com/DonovanDMC/E621/blob/89d662f19dc76c77e28f40b18a96f9043c4e2a3a/src/types/index.d.ts#L9) |
57
39
  | `instanceHost` | String | e621.net | [See Code](https://github.com/DonovanDMC/E621/blob/89d662f19dc76c77e28f40b18a96f9043c4e2a3a/src/types/index.d.ts#L15) |
58
-
59
- A map of features we support to their methods is listed below.
60
-
61
- ## Methods
62
- The legend for the symbols can be found after the table.
63
- | Section | Description | Location |
64
- |:---:|:---:|:---:|
65
- | Artists | Get Artist | `artists.get` |
66
- | Artists | Get Artist By Name | `artists.getByName` |
67
- | Artists | Search Artists | `artists.search` |
68
- | Artists | Create Artist* | `artists.create` |
69
- | Artists | Modify Artist* | `artists.modify` |
70
- | Artists | Delete Artist^ | `artists.delete` |
71
- | Artists | Revert Artist* | `artists.revert` |
72
- | Artists | Search Artist History | `artists.searchHistory` |
73
- | Type | Description | Location || Pools | Get Pool | `pools.get` |
74
- | Pools | Get Pool By Name | `pools.getByName` |
75
- | Pools | Search Pools | `pools.search` |
76
- | Pools | Create Pool* | `pools.create` |
77
- | Pools | Modify Pool* | `pools.modify` |
78
- | Pools | Delete Pool^ | `pools.delete` |
79
- | Pools | Revert Pool* | `pools.revert` |
80
- | Pools | Search Pool History | `pools.searchHistory` |
81
- | Pools | Add Post To Pool | `pools.addPost` |
82
- | Pools | Remove Post From Pool | `pools.removePost` |
83
- | Type | Description | Location |
84
- | Posts | Get Post By ID | `posts.get` |
85
- | Posts | Get Post By MD5 | `posts.getByMD5` |
86
- | Posts | Search Posts | `posts.search` |
87
- | Posts | Create Post* | `posts.create` |
88
- | Posts | Modify Post* | `posts.modify` |
89
- | Posts | Vote On Post* | `posts.vote` |
90
- | Posts | Revert Post* | `posts.revert` |
91
- | Posts | Search Post History | `posts.searchHistory` |
92
- | Type | Description | Location |
93
- | Post Sets | Get Post Set | `postSets.get` |
94
- | Post Sets | Search Sets | `postSets.search` |
95
- | Post Sets | Create Post Set* | `postSets.create` |
96
- | Post Sets | Modify Post Set* | `postSets.modify` |
97
- | Post Sets | Delete Post Set* | `postSets.delete` |
98
- | Post Sets | Add Post To Set* | `postSets.addPost` |
99
- | Post Sets | Remove Post From Set* | `postSets.removePost` |
100
- | Type | Description | Location |
101
- | User Feedback | Get Feedback | `userFeedback.get` |
102
- | User Feedback | Search Feedback | `userFeedback.search` |
103
- | User Feedback | Create Feedback# | `userFeedback.create` |
104
- | User Feedback | Modify Feedback# | `userFeedback.modify` |
105
- | User Feedback | Delete Feedback# | `userFeedback.delete` |
106
- | Type | Description | Location |
107
- | Users | Get User (ID/Name) | `users.get` |
108
- | Users | Search Users | `users.search` |
109
- | Users | Get Authenticated User* | `users.getSelf` |
110
- | Users | Edit Authenticated User* | `users.editSelf` |
111
- | Users | Get Upload Limit* | `users.getUploadLimit` |
112
- | Users | Get Favorites | `users.getFavorites` |
113
- | Users | Add Favorite* | `users.addFavorite` |
114
- | Users | Remove Favorite* | `users.removeFavorite` |
115
- | Type | Description | Location |
116
- | Wiki Page | Get Wiki Page | `wikiPages.get` |
117
- | Wiki Page | Get Wiki Page (By Name) | `wikiPages.getByName` |
118
- | Wiki Page | Search Wiki Pages | `wikiPages.search` |
119
- | Wiki Page | Create Wiki Page* | `wikiPages.create` |
120
- | Wiki Page | Modify Wiki Page* | `wikiPages.modify` |
121
- | Wiki Page | Delete Wiki Page^ | `wikiPages.delete` |
122
- | Wiki Page | Revert Wiki Page* | `wikiPages.revert` |
123
- | Wiki Page | Search Wiki Page History | `wikiPages.searchHistory` |
124
-
125
- #### Method Symbol Legend
126
- | Symbol | Meaning |
127
- |:------:|:-----------------------:|
128
- | * | Requires Authentication |
129
- | $ | Requires Privileged |
130
- | ^ | Requires Janitor |
131
- | # | Requires Moderator |
132
- | & | Requires Admin |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "e621",
3
- "version": "2.0.3",
3
+ "version": "2.1.3",
4
4
  "description": "A module for interfacing with e621.",
5
5
  "main": "build/src/index.js",
6
6
  "scripts": {
@@ -28,9 +28,17 @@
28
28
  },
29
29
  "homepage": "https://github.com/DonovanDMC/E621#readme",
30
30
  "devDependencies": {
31
- "@uwu-codes/eslint-config": "^1.0.25",
31
+ "@types/chai": "^4.3.0",
32
+ "@types/debug": "^4.1.7",
33
+ "@types/mocha": "^9.0.0",
34
+ "@uwu-codes/eslint-config": "^1.0.31",
32
35
  "@uwu-codes/tsconfig": "^1.0.1",
33
- "ts-node": "^10.3.0",
34
- "typescript": "^4.4.4"
36
+ "chai": "^4.3.4",
37
+ "mocha": "^9.1.3",
38
+ "ts-node": "^10.4.0",
39
+ "typescript": "^4.5.4"
40
+ },
41
+ "dependencies": {
42
+ "debug": "^4.3.3"
35
43
  }
36
44
  }
@@ -1,11 +1,12 @@
1
1
  import type { Options, InstanceOptions } from "./types";
2
2
  import RequestHandler from "./util/RequestHandler";
3
3
  import Artists from "./modules/Artists";
4
+ import Pools from "./modules/Pools";
4
5
  import Posts from "./modules/Posts";
6
+ import PostSets from "./modules/PostSets";
7
+ import Tags from "./modules/Tags";
5
8
  import UserFeedback from "./modules/UserFeedback";
6
9
  import Users from "./modules/Users";
7
- import PostSets from "./modules/PostSets";
8
- import Pools from "./modules/Pools";
9
10
  import WikiPages from "./modules/WikiPages";
10
11
  import Artist from "./structures/Artist";
11
12
  import ArtistHistory from "./structures/ArtistHistory";
@@ -15,15 +16,19 @@ import PoolHistory from "./structures/PoolHistory";
15
16
  import Post from "./structures/Post";
16
17
  import PostHistory from "./structures/PostHistory";
17
18
  import PostSet from "./structures/PostSet";
19
+ import Tag from "./structures/Tag";
20
+ import TagHistory from "./structures/TagHistory";
18
21
  import User from "./structures/User";
19
22
  import WikiPage from "./structures/WikiPage";
20
23
  import WikiPageHistory from "./structures/WikiPageHistory";
21
24
  export default class E621 {
22
- artists: Artists;
25
+ POST_LIMIT_PER_REQUEST: number;
23
26
  request: RequestHandler;
24
- postSets: PostSets;
27
+ artists: Artists;
25
28
  pools: Pools;
26
29
  posts: Posts;
30
+ postSets: PostSets;
31
+ tags: Tags;
27
32
  userFeedback: UserFeedback;
28
33
  users: Users;
29
34
  wikiPages: WikiPages;
@@ -33,4 +38,4 @@ export default class E621 {
33
38
  }
34
39
  export * from "./types";
35
40
  export { APIError } from "./util/RequestHandler";
36
- export { Artist, ArtistHistory, AuthenticatedUser, Pool, PoolHistory, Post, PostHistory, PostSet, User, WikiPage, WikiPageHistory };
41
+ export { Artist, ArtistHistory, AuthenticatedUser, Pool, PoolHistory, Post, PostHistory, PostSet, Tag, TagHistory, User, WikiPage, WikiPageHistory };
@@ -13,15 +13,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  return (mod && mod.__esModule) ? mod : { "default": mod };
14
14
  };
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.WikiPageHistory = exports.WikiPage = exports.User = exports.PostSet = exports.PostHistory = exports.Post = exports.PoolHistory = exports.Pool = exports.AuthenticatedUser = exports.ArtistHistory = exports.Artist = exports.APIError = void 0;
16
+ exports.WikiPageHistory = exports.WikiPage = exports.User = exports.TagHistory = exports.Tag = exports.PostSet = exports.PostHistory = exports.Post = exports.PoolHistory = exports.Pool = exports.AuthenticatedUser = exports.ArtistHistory = exports.Artist = exports.APIError = void 0;
17
17
  const RequestHandler_1 = __importDefault(require("./util/RequestHandler"));
18
18
  // Modules
19
19
  const Artists_1 = __importDefault(require("./modules/Artists"));
20
+ const Pools_1 = __importDefault(require("./modules/Pools"));
20
21
  const Posts_1 = __importDefault(require("./modules/Posts"));
22
+ const PostSets_1 = __importDefault(require("./modules/PostSets"));
23
+ const Tags_1 = __importDefault(require("./modules/Tags"));
21
24
  const UserFeedback_1 = __importDefault(require("./modules/UserFeedback"));
22
25
  const Users_1 = __importDefault(require("./modules/Users"));
23
- const PostSets_1 = __importDefault(require("./modules/PostSets"));
24
- const Pools_1 = __importDefault(require("./modules/Pools"));
25
26
  const WikiPages_1 = __importDefault(require("./modules/WikiPages"));
26
27
  // Structures
27
28
  const Artist_1 = __importDefault(require("./structures/Artist"));
@@ -40,6 +41,10 @@ const PostHistory_1 = __importDefault(require("./structures/PostHistory"));
40
41
  exports.PostHistory = PostHistory_1.default;
41
42
  const PostSet_1 = __importDefault(require("./structures/PostSet"));
42
43
  exports.PostSet = PostSet_1.default;
44
+ const Tag_1 = __importDefault(require("./structures/Tag"));
45
+ exports.Tag = Tag_1.default;
46
+ const TagHistory_1 = __importDefault(require("./structures/TagHistory"));
47
+ exports.TagHistory = TagHistory_1.default;
43
48
  const User_1 = __importDefault(require("./structures/User"));
44
49
  exports.User = User_1.default;
45
50
  const WikiPage_1 = __importDefault(require("./structures/WikiPage"));
@@ -50,11 +55,13 @@ const package_json_1 = __importDefault(require("../package.json"));
50
55
  // note for future reference (browser compatibility?)
51
56
  // POST with "_method=*" can be used in place of PUT/PATCH/DELETE
52
57
  class E621 {
53
- artists = new Artists_1.default(this);
58
+ POST_LIMIT_PER_REQUEST = 320;
54
59
  request = new RequestHandler_1.default(this);
55
- postSets = new PostSets_1.default(this);
60
+ artists = new Artists_1.default(this);
56
61
  pools = new Pools_1.default(this);
57
62
  posts = new Posts_1.default(this);
63
+ postSets = new PostSets_1.default(this);
64
+ tags = new Tags_1.default(this);
58
65
  userFeedback = new UserFeedback_1.default(this);
59
66
  users = new Users_1.default(this);
60
67
  wikiPages = new WikiPages_1.default(this);
@@ -77,6 +84,7 @@ class E621 {
77
84
  options.imageReconstructionType = "yiffy";
78
85
  break;
79
86
  case "e621.local":
87
+ case "localhost":
80
88
  options.imageReconstructionType = "dev";
81
89
  break;
82
90
  default: {
@@ -116,4 +124,4 @@ class E621 {
116
124
  exports.default = E621;
117
125
  var RequestHandler_2 = require("./util/RequestHandler");
118
126
  Object.defineProperty(exports, "APIError", { enumerable: true, get: function () { return RequestHandler_2.APIError; } });
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDJFQUFtRDtBQUNuRCxVQUFVO0FBQ1YsZ0VBQXdDO0FBQ3hDLDREQUFvQztBQUNwQywwRUFBa0Q7QUFDbEQsNERBQW9DO0FBQ3BDLGtFQUEwQztBQUMxQyw0REFBb0M7QUFDcEMsb0VBQTRDO0FBQzVDLGFBQWE7QUFDYixpRUFBeUM7QUEyRXhDLGlCQTNFTSxnQkFBTSxDQTJFTjtBQTFFUCwrRUFBdUQ7QUEyRXRELHdCQTNFTSx1QkFBYSxDQTJFTjtBQTFFZCx1RkFBK0Q7QUEyRTlELDRCQTNFTSwyQkFBaUIsQ0EyRU47QUExRWxCLDZEQUFxQztBQTJFcEMsZUEzRU0sY0FBSSxDQTJFTjtBQTFFTCwyRUFBbUQ7QUEyRWxELHNCQTNFTSxxQkFBVyxDQTJFTjtBQTFFWiw2REFBcUM7QUEyRXBDLGVBM0VNLGNBQUksQ0EyRU47QUExRUwsMkVBQW1EO0FBMkVsRCxzQkEzRU0scUJBQVcsQ0EyRU47QUExRVosbUVBQTJDO0FBMkUxQyxrQkEzRU0saUJBQU8sQ0EyRU47QUExRVIsNkRBQXFDO0FBMkVwQyxlQTNFTSxjQUFJLENBMkVOO0FBMUVMLHFFQUE2QztBQTJFNUMsbUJBM0VNLGtCQUFRLENBMkVOO0FBMUVULG1GQUEyRDtBQTJFMUQsMEJBM0VNLHlCQUFlLENBMkVOO0FBekVoQixtRUFBa0M7QUFFbEMscURBQXFEO0FBQ3JELGlFQUFpRTtBQUNqRSxNQUFxQixJQUFJO0lBQ3hCLE9BQU8sR0FBRyxJQUFJLGlCQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsT0FBTyxHQUFHLElBQUksd0JBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxRQUFRLEdBQUcsSUFBSSxrQkFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLEtBQUssR0FBRyxJQUFJLGVBQUssQ0FBQyxJQUFJ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
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDJFQUFtRDtBQUNuRCxVQUFVO0FBQ1YsZ0VBQXdDO0FBQ3hDLDREQUFvQztBQUNwQyw0REFBb0M7QUFDcEMsa0VBQTBDO0FBQzFDLDBEQUFrQztBQUNsQywwRUFBa0Q7QUFDbEQsNERBQW9DO0FBQ3BDLG9FQUE0QztBQUM1QyxhQUFhO0FBQ2IsaUVBQXlDO0FBK0V4QyxpQkEvRU0sZ0JBQU0sQ0ErRU47QUE5RVAsK0VBQXVEO0FBK0V0RCx3QkEvRU0sdUJBQWEsQ0ErRU47QUE5RWQsdUZBQStEO0FBK0U5RCw0QkEvRU0sMkJBQWlCLENBK0VOO0FBOUVsQiw2REFBcUM7QUErRXBDLGVBL0VNLGNBQUksQ0ErRU47QUE5RUwsMkVBQW1EO0FBK0VsRCxzQkEvRU0scUJBQVcsQ0ErRU47QUE5RVosNkRBQXFDO0FBK0VwQyxlQS9FTSxjQUFJLENBK0VOO0FBOUVMLDJFQUFtRDtBQStFbEQsc0JBL0VNLHFCQUFXLENBK0VOO0FBOUVaLG1FQUEyQztBQStFMUMsa0JBL0VNLGlCQUFPLENBK0VOO0FBOUVSLDJEQUFtQztBQStFbEMsY0EvRU0sYUFBRyxDQStFTjtBQTlFSix5RUFBaUQ7QUErRWhELHFCQS9FTSxvQkFBVSxDQStFTjtBQTlFWCw2REFBcUM7QUErRXBDLGVBL0VNLGNBQUksQ0ErRU47QUE5RUwscUVBQTZDO0FBK0U1QyxtQkEvRU0sa0JBQVEsQ0ErRU47QUE5RVQsbUZBQTJEO0FBK0UxRCwwQkEvRU0seUJBQWUsQ0ErRU47QUE3RWhCLG1FQUFrQztBQUVsQyxxREFBcUQ7QUFDckQsaUVBQWlFO0FBQ2pFLE1BQXFCLElBQUk7SUFDeEIsc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0lBQzdCLE9BQU8sR0FBRyxJQUFJLHdCQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsT0FBTyxH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