e621 1.0.9 → 2.0.0-dev.11

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 (50) hide show
  1. package/.node-version +1 -0
  2. package/README.md +116 -187
  3. package/build/package.json +14 -11
  4. package/build/src/index.d.ts +28 -295
  5. package/build/src/index.js +83 -442
  6. package/build/src/modules/Pools.d.ts +120 -0
  7. package/build/src/modules/Pools.js +247 -0
  8. package/build/src/modules/PostSets.d.ts +88 -0
  9. package/build/src/modules/PostSets.js +182 -0
  10. package/build/src/modules/Posts.d.ts +124 -0
  11. package/build/src/modules/Posts.js +323 -0
  12. package/build/src/modules/UserFeedback.d.ts +66 -0
  13. package/build/src/modules/UserFeedback.js +134 -0
  14. package/build/src/modules/Users.d.ts +110 -0
  15. package/build/src/modules/Users.js +248 -0
  16. package/build/src/modules/WikiPages.d.ts +99 -0
  17. package/build/src/modules/WikiPages.js +208 -0
  18. package/build/src/structures/AuthenticatedUser.d.ts +109 -0
  19. package/build/src/structures/AuthenticatedUser.js +128 -0
  20. package/build/src/structures/Pool.d.ts +85 -0
  21. package/build/src/structures/Pool.js +110 -0
  22. package/build/src/structures/PoolHistory.d.ts +42 -0
  23. package/build/src/structures/PoolHistory.js +53 -0
  24. package/build/src/structures/Post.d.ts +147 -0
  25. package/build/src/structures/Post.js +155 -0
  26. package/build/src/structures/PostHistory.d.ts +52 -0
  27. package/build/src/structures/PostHistory.js +93 -0
  28. package/build/src/structures/PostSet.d.ts +71 -0
  29. package/build/src/structures/PostSet.js +91 -0
  30. package/build/src/structures/User.d.ts +62 -0
  31. package/build/src/structures/User.js +80 -0
  32. package/build/src/structures/WikiPage.d.ts +16 -0
  33. package/build/src/structures/WikiPage.js +26 -0
  34. package/build/src/structures/WikiPageHistory.d.ts +37 -0
  35. package/build/src/structures/WikiPageHistory.js +49 -0
  36. package/build/src/types/index.d.ts +92 -0
  37. package/build/src/types/pools.d.ts +60 -0
  38. package/build/src/types/post_sets.d.ts +33 -0
  39. package/build/src/types/posts.d.ts +165 -0
  40. package/build/src/types/user_feedback.d.ts +27 -0
  41. package/build/src/types/users.d.ts +277 -0
  42. package/build/src/types/wiki_pages.d.ts +65 -0
  43. package/build/src/util/FormHelper.d.ts +9 -0
  44. package/build/src/util/FormHelper.js +15 -0
  45. package/build/src/util/MultipartData.d.ts +7 -0
  46. package/build/src/util/MultipartData.js +39 -0
  47. package/build/src/util/RequestHandler.d.ts +37 -0
  48. package/build/src/util/RequestHandler.js +311 -0
  49. package/package.json +14 -11
  50. package/LICENSE +0 -21
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const FormHelper_1 = __importDefault(require("../util/FormHelper"));
7
+ const RequestHandler_1 = require("../util/RequestHandler");
8
+ class UserFeedback {
9
+ auth;
10
+ main;
11
+ constructor(main) {
12
+ Object.defineProperties(this, {
13
+ auth: {
14
+ get() {
15
+ return !this.main.options.authUser || !this.main.options.authKey ? null : `Basic ${Buffer.from(`${this.main.options.authUser}:${this.main.options.authKey}`).toString("base64")}`;
16
+ },
17
+ configurable: false,
18
+ enumerable: false
19
+ },
20
+ main: {
21
+ value: main,
22
+ configurable: false,
23
+ enumerable: false,
24
+ writable: false
25
+ }
26
+ });
27
+ }
28
+ /**
29
+ * Get a specific user feedback
30
+ *
31
+ * @param {number} id - The id of the feedback to fetch
32
+ * @returns {Promise<(UserFeedbackProperties | null)>}
33
+ */
34
+ async get(id) {
35
+ const res = await this.main.request.get(`/user_feedbacks/${id}.json`).catch(err => {
36
+ if (err instanceof RequestHandler_1.APIError && err.statusCode === 404)
37
+ return null;
38
+ throw err;
39
+ });
40
+ return res;
41
+ }
42
+ /**
43
+ * Search for user feedback
44
+ *
45
+ * @param {object} [options]
46
+ * @param {string} [options.username] - narrow the search by a specific target
47
+ * @param {string} [options.creator] - narrow the search by a specific creator
48
+ * @param {string} [options.body] - narrow the search by the content of the feedback
49
+ * @param {FeedbackCategories} [options.category] - narrow the search by the type
50
+ * @param {(number |`${"" | "a" | "b"}${number}`)} - page of results to get
51
+ * @param {number} [options.limit] - limit the maximum returned results
52
+ * @returns {Promise<Array<UserFeedbackProperties>>}
53
+ */
54
+ async search(options) {
55
+ options = options ?? {};
56
+ const qs = new FormHelper_1.default();
57
+ if (typeof options.username === "string")
58
+ qs.add("search[user_name]", options.username);
59
+ if (typeof options.creator === "string")
60
+ qs.add("search[creator_name]", options.creator);
61
+ if (typeof options.body === "string")
62
+ qs.add("search[body_matches]", options.body);
63
+ if (typeof options.category === "string")
64
+ qs.add("search[category]", options.category);
65
+ if (typeof options.page !== "undefined")
66
+ qs.add("page", options.page);
67
+ if (typeof options.limit === "number")
68
+ qs.add("limit", options.limit);
69
+ const res = await this.main.request.get(`/user_feedbacks.json?${qs.build()}`);
70
+ return res;
71
+ }
72
+ /**
73
+ * Add feedback to a user
74
+ *
75
+ * * Requires Authentication
76
+ *
77
+ * * Requires Moderator
78
+ *
79
+ * @param {object} options
80
+ * @param {string} options.username - the user the feedback is for
81
+ * @param {FeedbackCategories} options.category - the type of feedback
82
+ * @param {string} options.body - the content of the feedback
83
+ * @returns {Promise<UserFeedbackProperties>}
84
+ */
85
+ async create(options) {
86
+ this.main.request.authCheck.call(this, "UserFeedback#create");
87
+ const qs = new FormHelper_1.default()
88
+ .add("user_feedback[user_name]", options.username)
89
+ .add("user_feedback[category]", options.category)
90
+ .add("user_feedback[body]", options.body);
91
+ const res = await this.main.request.post("/user_feedbacks.json", qs.build());
92
+ return res;
93
+ }
94
+ /**
95
+ * Modify an existing user feedback
96
+ *
97
+ * * Requires Authentication
98
+ *
99
+ * * Requires Moderator
100
+ *
101
+ * @param {number} id - the id of the feedback to edit
102
+ * @param {object} options
103
+ * @param {string} [options.body] - the content of the feedback
104
+ * @param {FeedbackCategories} [options.category] - the type of feedback
105
+ * @returns {Promise<UserFeedbackProperties>}
106
+ */
107
+ async modify(id, options) {
108
+ this.main.request.authCheck.call(this, "UserFeedback#modify");
109
+ const qs = new FormHelper_1.default();
110
+ if (options.body)
111
+ qs.add("user_feedback[body]", options.body);
112
+ if (options.category)
113
+ qs.add("user_feedback[category]", options.category);
114
+ const res = await this.main.request.patch(`/user_feedbacks/${id}.json`, qs.build());
115
+ return res;
116
+ }
117
+ /**
118
+ * Delete an existing user feedback
119
+ *
120
+ * * Requires Authentication
121
+ *
122
+ * * Requires Moderator
123
+ *
124
+ * @param {number} id - the id of the feedback to delete
125
+ * @returns {Promise<null>}
126
+ */
127
+ async delete(id) {
128
+ this.main.request.authCheck.call(this, "UserFeedback#delete");
129
+ const res = await this.main.request.delete(`/user_feedbacks/${id}.json`);
130
+ return res;
131
+ }
132
+ }
133
+ exports.default = UserFeedback;
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlckZlZWRiYWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZHVsZXMvVXNlckZlZWRiYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBUUEsb0VBQTRDO0FBQzVDLDJEQUFrRDtBQUVsRCxNQUFxQixZQUFZO0lBQ2YsSUFBSSxDQUFnQjtJQUNwQixJQUFJLENBQU87SUFDNUIsWUFBWSxJQUFVO1FBQ3JCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDN0IsSUFBSSxFQUFFO2dCQUNMLEdBQUc7b0JBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDbkwsQ0FBQztnQkFDRCxZQUFZLEVBQUUsS0FBSztnQkFDbkIsVUFBVSxFQUFFLEtBQUs7YUFDakI7WUFDRCxJQUFJLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixRQUFRLEVBQUUsS0FBSzthQUNmO1NBQ0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFVO1FBQ25CLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUF5QixtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxL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
@@ -0,0 +1,110 @@
1
+ import type E621 from "..";
2
+ import AuthenticatedUser from "../structures/AuthenticatedUser";
3
+ import Post from "../structures/Post";
4
+ import User from "../structures/User";
5
+ import type { UploadLimit, SearchUsersOptions, EditSelfUserOptions } from "../types";
6
+ export default class Users {
7
+ private readonly auth;
8
+ private readonly main;
9
+ constructor(main: E621);
10
+ /**
11
+ * Get a user by their id or username
12
+ *
13
+ * Use `getSelf` to get the currently authenticated user
14
+ *
15
+ * @param {(number | string)} idOrname - The id or username of the user to get
16
+ * @returns {Promise<(User | null)>}
17
+ */
18
+ get(idOrName: number | string): Promise<User | null>;
19
+ /**
20
+ * Search for users
21
+ *
22
+ * @param {object} [options]
23
+ * @param {string} [options.name] - narrow the search by usernames
24
+ * @param {string} [options.email] - narrow the search by email (requires elevated privileges)
25
+ * @param {number} [options.level] - narrow the search by user level
26
+ * @param {number} [options.minLevel] - narrow the search by minimum user level
27
+ * @param {number} [options.maxLevel] - narrow the search by maximum user level
28
+ * @param {boolean} [options.unrestrictedUploads] - narrow the search by unrestricted uploaders
29
+ * @param {boolean} [options.approver] - narrow the search by approvers
30
+ * @param {UserOrder} [options.order] - order the search results
31
+ * @param {(number |`${"" | "a" | "b"}${number}`)} - page to get
32
+ * @param {number} [options.limit] - limit the maximum amount of results returned
33
+ * @returns {Promise<Array<User>>}
34
+ */
35
+ search(options?: SearchUsersOptions): Promise<User[]>;
36
+ /**
37
+ * Get the currently authenticated user
38
+ *
39
+ * * Authentication Required
40
+ *
41
+ * @returns {Promise<AuthenticatedUser>}
42
+ */
43
+ getSelf(): Promise<AuthenticatedUser>;
44
+ /**
45
+ * Edit the authenticated user
46
+ *
47
+ * * Requires Authentication
48
+ *
49
+ * @param {object} options
50
+ * @param {(number | null)} [options.avatarID] - post id to use as avatar
51
+ * @param {string} [options.about] - about section
52
+ * @param {string} [options.artinfo] - commissions section
53
+ * @param {Timezones} [options.timezone] - timezone
54
+ * @param {boolean} [options.receiveEmailNotifications] - if you should receive notifications via email
55
+ * @param {number} [options.commentThreshold] - the threshold at which comments should be hidden (usually negative)
56
+ * @param {DefaultImageSize} [options.defaultImageSize] - default image display size
57
+ * @param {number} [options.postsPerPage] - default posts per page, between 25 and 250
58
+ * @param {boolean} [options.safeMode] - toggle safe mode
59
+ * @param {(Array<string> | string)} [options.blacklistedTags] - the list of tags to hide in searches
60
+ * @param {boolean} [options.blacklistUsers] - hide things from users that have been blocked from the site
61
+ * @param {boolean} [options.coloredUsernames] - Color each user's name depending on their level. See the [legend](https://e621.net/wiki_pages/e621:colored_usernames) for what the colors are.
62
+ * @param {boolean} [options.enableKeyboardShortcuts] - Enables the use of keyboard shortcuts for a majority of site actions related to posts. A list of keyboard shortcuts is available [here](https://e621.net/static/keyboard_shortcuts).
63
+ * @param {boolean} [options.enableAutoComplete] - Enables auto-completion on most tag and user entry fields.
64
+ * @param {boolean} [options.enablePrivacyMode] - Makes a cursory effort to prevent showing your favorites to others users. Has not been well tested.
65
+ * @param {boolean} [options.enablePostStatistics] - Show post statistics below posts on search pages.
66
+ * @param {boolean} [options.descriptionCollapsed] - Don't expand post descriptions on page load.
67
+ * @param {boolean} [options.hideComments] - Do not show the comments section on post pages.
68
+ * @param {boolean} [options.disableCroppedThumbnails] - Prevent other users from sending you DMails. You will be prevented from sending DMails to non-staff members while this option is enabled. Staff are always allowed to send you DMails.
69
+ * @param {boolean} [options.showOwnHiddenComments] - Disables displaying cropped thumbnails on the mobile layout of the site in favor of scaled thumbnails. Has no effect on the desktop site.
70
+ * @param {boolean} [options.enableCompactUploader] - Show your own hidden comments on comment pages.
71
+ * @param {string} [options.dmailFilter] - A list of banned words (space delimited). Any dmail you receive with a banned word will automatically be deleted.
72
+ * @param {string} [options.frequentTags] - A list of tags that you use often. They will appear when using the list of Related Tags.
73
+ * @param {boolean} [options.disableResponsiveMode] - Disable alternative layout for mobile and tablet.
74
+ * @param {string} [options.customCSSStyle] - Style to apply to the whole site.
75
+ * @returns {Promise<null>}
76
+ */
77
+ editSelf(options: EditSelfUserOptions): Promise<null>;
78
+ /**
79
+ * Get the authenticated user's /users/upload_limit (best way I can find to find out who you are)
80
+ *
81
+ * * Authentication Required
82
+ *
83
+ * @returns {Promise<UploadLimit>}
84
+ */
85
+ getUploadLimit(): Promise<UploadLimit>;
86
+ /**
87
+ * Get the favorites of a user
88
+ *
89
+ * @param {number} [id] - the id of the user to get favorites for, or none to get the authenticated user, if provided
90
+ */
91
+ getFavorites(id?: number): Promise<Post[]>;
92
+ /**
93
+ * Add a favorite
94
+ *
95
+ * * Requires Authentication
96
+ *
97
+ * @param {number} id - the id of the post to favorite
98
+ * @returns {Promise<Post>}
99
+ */
100
+ addFavorite(id: number): Promise<Post>;
101
+ /**
102
+ * Remove a favorite
103
+ *
104
+ * * Requires Authentication
105
+ *
106
+ * @param {number} id - the id of the post to unfavorite
107
+ * @returns {Promise<null>}
108
+ */
109
+ removeFavorite(id: number): Promise<null>;
110
+ }
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const AuthenticatedUser_1 = __importDefault(require("../structures/AuthenticatedUser"));
7
+ const Post_1 = __importDefault(require("../structures/Post"));
8
+ const User_1 = __importDefault(require("../structures/User"));
9
+ const FormHelper_1 = __importDefault(require("../util/FormHelper"));
10
+ const RequestHandler_1 = require("../util/RequestHandler");
11
+ class Users {
12
+ auth;
13
+ main;
14
+ constructor(main) {
15
+ Object.defineProperties(this, {
16
+ auth: {
17
+ get() {
18
+ return !this.main.options.authUser || !this.main.options.authKey ? null : `Basic ${Buffer.from(`${this.main.options.authUser}:${this.main.options.authKey}`).toString("base64")}`;
19
+ },
20
+ configurable: false,
21
+ enumerable: false
22
+ },
23
+ main: {
24
+ value: main,
25
+ configurable: false,
26
+ enumerable: false,
27
+ writable: false
28
+ }
29
+ });
30
+ }
31
+ /**
32
+ * Get a user by their id or username
33
+ *
34
+ * Use `getSelf` to get the currently authenticated user
35
+ *
36
+ * @param {(number | string)} idOrname - The id or username of the user to get
37
+ * @returns {Promise<(User | null)>}
38
+ */
39
+ async get(idOrName) {
40
+ const res = await this.main.request.get(`/users/${idOrName}.json`).catch(err => {
41
+ if (err instanceof RequestHandler_1.APIError && err.statusCode === 404)
42
+ return null;
43
+ throw err;
44
+ });
45
+ return res === null ? null : new User_1.default(this.main, res);
46
+ }
47
+ /**
48
+ * Search for users
49
+ *
50
+ * @param {object} [options]
51
+ * @param {string} [options.name] - narrow the search by usernames
52
+ * @param {string} [options.email] - narrow the search by email (requires elevated privileges)
53
+ * @param {number} [options.level] - narrow the search by user level
54
+ * @param {number} [options.minLevel] - narrow the search by minimum user level
55
+ * @param {number} [options.maxLevel] - narrow the search by maximum user level
56
+ * @param {boolean} [options.unrestrictedUploads] - narrow the search by unrestricted uploaders
57
+ * @param {boolean} [options.approver] - narrow the search by approvers
58
+ * @param {UserOrder} [options.order] - order the search results
59
+ * @param {(number |`${"" | "a" | "b"}${number}`)} - page to get
60
+ * @param {number} [options.limit] - limit the maximum amount of results returned
61
+ * @returns {Promise<Array<User>>}
62
+ */
63
+ async search(options) {
64
+ options = options ?? {};
65
+ const qs = new FormHelper_1.default();
66
+ if (typeof options.name === "string")
67
+ qs.add("search[name_matches]", options.name);
68
+ if (typeof options.email === "string")
69
+ qs.add("search[email_matches]", options.email);
70
+ if (typeof options.level === "number")
71
+ qs.add("search[level]", options.level);
72
+ if (typeof options.minLevel === "number")
73
+ qs.add("search[min_level]", options.minLevel);
74
+ if (typeof options.maxLevel === "number")
75
+ qs.add("search[max_level]", options.maxLevel);
76
+ if (typeof options.unrestrictedUploads === "boolean")
77
+ qs.add("search[can_upload_free]", options.unrestrictedUploads);
78
+ if (typeof options.approver === "boolean")
79
+ qs.add("search[can_approve_posts]", options.approver);
80
+ if (typeof options.order === "string")
81
+ qs.add("search[order]", options.order);
82
+ if (typeof options.page !== "undefined")
83
+ qs.add("page", options.page);
84
+ if (typeof options.limit === "number")
85
+ qs.add("limit", options.limit);
86
+ const res = await this.main.request.get(`/user_feedbacks.json?${qs.build()}`);
87
+ return res.map(info => new User_1.default(this.main, info));
88
+ }
89
+ /**
90
+ * Get the currently authenticated user
91
+ *
92
+ * * Authentication Required
93
+ *
94
+ * @returns {Promise<AuthenticatedUser>}
95
+ */
96
+ async getSelf() {
97
+ this.main.request.authCheck.call(this, "Users#getSelf");
98
+ const { id } = await this.getUploadLimit();
99
+ const res = await this.main.request.get(`/users/${id}.json`);
100
+ return new AuthenticatedUser_1.default(this.main, res);
101
+ }
102
+ /**
103
+ * Edit the authenticated user
104
+ *
105
+ * * Requires Authentication
106
+ *
107
+ * @param {object} options
108
+ * @param {(number | null)} [options.avatarID] - post id to use as avatar
109
+ * @param {string} [options.about] - about section
110
+ * @param {string} [options.artinfo] - commissions section
111
+ * @param {Timezones} [options.timezone] - timezone
112
+ * @param {boolean} [options.receiveEmailNotifications] - if you should receive notifications via email
113
+ * @param {number} [options.commentThreshold] - the threshold at which comments should be hidden (usually negative)
114
+ * @param {DefaultImageSize} [options.defaultImageSize] - default image display size
115
+ * @param {number} [options.postsPerPage] - default posts per page, between 25 and 250
116
+ * @param {boolean} [options.safeMode] - toggle safe mode
117
+ * @param {(Array<string> | string)} [options.blacklistedTags] - the list of tags to hide in searches
118
+ * @param {boolean} [options.blacklistUsers] - hide things from users that have been blocked from the site
119
+ * @param {boolean} [options.coloredUsernames] - Color each user's name depending on their level. See the [legend](https://e621.net/wiki_pages/e621:colored_usernames) for what the colors are.
120
+ * @param {boolean} [options.enableKeyboardShortcuts] - Enables the use of keyboard shortcuts for a majority of site actions related to posts. A list of keyboard shortcuts is available [here](https://e621.net/static/keyboard_shortcuts).
121
+ * @param {boolean} [options.enableAutoComplete] - Enables auto-completion on most tag and user entry fields.
122
+ * @param {boolean} [options.enablePrivacyMode] - Makes a cursory effort to prevent showing your favorites to others users. Has not been well tested.
123
+ * @param {boolean} [options.enablePostStatistics] - Show post statistics below posts on search pages.
124
+ * @param {boolean} [options.descriptionCollapsed] - Don't expand post descriptions on page load.
125
+ * @param {boolean} [options.hideComments] - Do not show the comments section on post pages.
126
+ * @param {boolean} [options.disableCroppedThumbnails] - Prevent other users from sending you DMails. You will be prevented from sending DMails to non-staff members while this option is enabled. Staff are always allowed to send you DMails.
127
+ * @param {boolean} [options.showOwnHiddenComments] - Disables displaying cropped thumbnails on the mobile layout of the site in favor of scaled thumbnails. Has no effect on the desktop site.
128
+ * @param {boolean} [options.enableCompactUploader] - Show your own hidden comments on comment pages.
129
+ * @param {string} [options.dmailFilter] - A list of banned words (space delimited). Any dmail you receive with a banned word will automatically be deleted.
130
+ * @param {string} [options.frequentTags] - A list of tags that you use often. They will appear when using the list of Related Tags.
131
+ * @param {boolean} [options.disableResponsiveMode] - Disable alternative layout for mobile and tablet.
132
+ * @param {string} [options.customCSSStyle] - Style to apply to the whole site.
133
+ * @returns {Promise<null>}
134
+ */
135
+ async editSelf(options) {
136
+ this.main.request.authCheck.call(this, "Users#editSelf");
137
+ if (!options)
138
+ throw new Error("options is required for Users#editSelf");
139
+ const qs = new FormHelper_1.default();
140
+ if (options.avatarID === null || typeof options.avatarID === "string")
141
+ qs.add("user[avatar_id]", options.avatarID || "");
142
+ if (typeof options.about === "string")
143
+ qs.add("user[profile_about]", options.about);
144
+ if (typeof options.artinfo === "string")
145
+ qs.add("user[profile_artinfo]", options.artinfo);
146
+ if (typeof options.timezone === "string")
147
+ qs.add("user[time_zone]", options.timezone);
148
+ if (typeof options.receiveEmailNotifications === "boolean")
149
+ qs.add("user[receive_email_notifications]", options.receiveEmailNotifications);
150
+ if (typeof options.commentThreshold === "number")
151
+ qs.add("user[comment_threshold]", options.commentThreshold);
152
+ if (typeof options.defaultImageSize === "number" && options.defaultImageSize >= 25 && options.defaultImageSize <= 250)
153
+ qs.add("user[default_image_size]", options.defaultImageSize);
154
+ if (typeof options.postsPerPage === "number")
155
+ qs.add("user[per_page]", options.postsPerPage);
156
+ if (typeof options.safeMode === "boolean")
157
+ qs.add("user[enable_safe_mode]", options.safeMode);
158
+ if (typeof options.blacklistedTags === "string" || Array.isArray(options.blacklistedTags))
159
+ qs.add("user[blacklisted_tags]", Array.isArray(options.blacklistedTags) ? options.blacklistedTags.join("\n") : options.blacklistedTags);
160
+ if (typeof options.blacklistUsers === "boolean")
161
+ qs.add("user[blacklist_users]", options.blacklistUsers);
162
+ // Advanced
163
+ if (typeof options.coloredUsernames === "boolean")
164
+ qs.add("user[style_usernames]", options.coloredUsernames);
165
+ if (typeof options.enableKeyboardShortcuts === "boolean")
166
+ qs.add("user[enable_keyboard_navigation]", options.enableKeyboardShortcuts);
167
+ if (typeof options.enableAutoComplete === "boolean")
168
+ qs.add("user[enable_auto_complete]", options.enableAutoComplete);
169
+ if (typeof options.enablePrivacyMode === "boolean")
170
+ qs.add("user[enable_privacy_mode]", options.enablePrivacyMode);
171
+ if (typeof options.enablePostStatistics === "boolean")
172
+ qs.add("user[show_post_statistics]", options.enablePostStatistics);
173
+ if (typeof options.descriptionCollapsed === "boolean")
174
+ qs.add("user[description_collapsed_initially]", options.descriptionCollapsed);
175
+ if (typeof options.hideComments === "boolean")
176
+ qs.add("user[hide_comments]", options.hideComments);
177
+ if (typeof options.disableCroppedThumbnails === "boolean")
178
+ qs.add("user[disable_cropped_thumbnails]", options.disableCroppedThumbnails);
179
+ if (typeof options.showOwnHiddenComments === "boolean")
180
+ qs.add("user[show_hidden_comments]", options.showOwnHiddenComments);
181
+ if (typeof options.enableCompactUploader === "boolean")
182
+ qs.add("user[enable_compact_uploader]", options.enableCompactUploader);
183
+ if (typeof options.dmailFilter === "string")
184
+ qs.add("user[dmail_filter_attributes][words]", options.dmailFilter);
185
+ if (typeof options.frequentTags === "string")
186
+ qs.add("user[favorite_tags]", options.frequentTags);
187
+ if (typeof options.disableResponsiveMode === "boolean")
188
+ qs.add("user[disable_responsive_mode]", options.disableResponsiveMode);
189
+ if (typeof options.customCSSStyle === "string")
190
+ qs.add("user[custom_style]", options.customCSSStyle);
191
+ // any id goes to to the current user
192
+ const res = await this.main.request.patch("/users/0.json", qs.build());
193
+ return res;
194
+ }
195
+ /**
196
+ * Get the authenticated user's /users/upload_limit (best way I can find to find out who you are)
197
+ *
198
+ * * Authentication Required
199
+ *
200
+ * @returns {Promise<UploadLimit>}
201
+ */
202
+ async getUploadLimit() {
203
+ this.main.request.authCheck.call(this, "Users#getUploadLimit");
204
+ const res = await this.main.request.get("/users/upload_limit.json");
205
+ return res;
206
+ }
207
+ /**
208
+ * Get the favorites of a user
209
+ *
210
+ * @param {number} [id] - the id of the user to get favorites for, or none to get the authenticated user, if provided
211
+ */
212
+ async getFavorites(id) {
213
+ if (!id) {
214
+ const auth = this.main.request.authCheck.call(this, "Users#getFavorites", false);
215
+ if (!auth)
216
+ throw new Error("calling Users#getFavorites without an id requires authentication");
217
+ }
218
+ const res = await this.main.request.get(`/favorites.json${!id ? "" : `?user_id=${id}`}`);
219
+ return res.posts.map(info => new Post_1.default(this.main, info));
220
+ }
221
+ /**
222
+ * Add a favorite
223
+ *
224
+ * * Requires Authentication
225
+ *
226
+ * @param {number} id - the id of the post to favorite
227
+ * @returns {Promise<Post>}
228
+ */
229
+ async addFavorite(id) {
230
+ this.main.request.authCheck.call(this, "Users#addFavorite");
231
+ const res = await this.main.request.get(`/favorites.json?post_id=${id}`);
232
+ return new Post_1.default(this.main, res.post);
233
+ }
234
+ /**
235
+ * Remove a favorite
236
+ *
237
+ * * Requires Authentication
238
+ *
239
+ * @param {number} id - the id of the post to unfavorite
240
+ * @returns {Promise<null>}
241
+ */
242
+ async removeFavorite(id) {
243
+ this.main.request.authCheck.call(this, "Users#removeFavorite");
244
+ return this.main.request.delete(`/favorites/${id}.json`);
245
+ }
246
+ }
247
+ exports.default = Users;
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kdWxlcy9Vc2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLHdGQUFnRTtBQUNoRSw4REFBc0M7QUFDdEMsOERBQXNDO0FBWXRDLG9FQUE0QztBQUM1QywyREFBa0Q7QUFFbEQsTUFBcUIsS0FBSztJQUNSLElBQUksQ0FBZ0I7SUFDcEIsSUFBSSxDQUFPO0lBQzVCLFlBQVksSUFBVTtRQUNyQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFO1lBQzdCLElBQUksRUFBRTtnQkFDTCxHQUFHO29CQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ25MLENBQUM7Z0JBQ0QsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLFVBQVUsRUFBRSxLQUFLO2FBQ2pCO1lBQ0QsSUFBSSxFQUFFO2dCQUNMLEtBQUssRUFBRSxJQUFJO2dCQUNYLFlBQVksRUFBRSxLQUFLO2dCQUNuQixVQUFVLEVBQUUsS0FBSztnQkFDakIsUUFBUSxFQUFFLEtBQUs7YUFDZjtTQUNELENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUF5QjtRQUNsQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBaUIs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
@@ -0,0 +1,99 @@
1
+ import type E621 from "..";
2
+ import WikiPage from "../structures/WikiPage";
3
+ import type { SearchWikiPagesOptions, CreateWikiPageOptions, ModifyWikiPageOptions, SearchWikiPageHistoryOptions } from "../types";
4
+ import WikiPageHistory from "../structures/WikiPageHistory";
5
+ export default class WikiPages {
6
+ private readonly auth;
7
+ private readonly main;
8
+ constructor(main: E621);
9
+ /**
10
+ * Get a wiki page by its id
11
+ *
12
+ * @param {number} id - The id of the wiki page to get
13
+ * @returns {Promise<(WikiPage | null)>}
14
+ */
15
+ get(id: number): Promise<WikiPage | null>;
16
+ /**
17
+ * Get a wiki page by its title
18
+ *
19
+ * @param {string} title - The title of the wiki page to get
20
+ * @returns {Promise<(WikiPage | null)>}
21
+ */
22
+ getByTitle(title: string): Promise<WikiPage | null>;
23
+ /**
24
+ * Search for wiki pages
25
+ *
26
+ * @param {object} [options]
27
+ * @param {string} [options.title] - narrow the results by the title of the wiki page
28
+ * @param {string} [options.creator] - narrow the results by the (name of the) creator of the wiki page
29
+ * @param {string} [options.body] - narrow the results by the content of the wiki page
30
+ * @param {string} [options.otherNames] - narrow the results by the other names of the wiki page
31
+ * @param {boolean} [options.hasOtherNames] - narrow the results by the wiki page having other names
32
+ * @param {boolean} [options.hideDeleted] - narrow the results by the wiki page being deleted or not
33
+ * @param {WikiPageOrder} [options.order] - the order of the results
34
+ * @param {(number |`${"" | "a" | "b"}${number}`)} [options.page] - page of results to get
35
+ * @param {number} [options.limit] - limit the maximum amount of results returned
36
+ * @returns {Promise<Array<WikiPage>>}
37
+ */
38
+ search(options?: SearchWikiPagesOptions): Promise<WikiPage[]>;
39
+ /**
40
+ * Create a wiki page
41
+ *
42
+ * * Requires Authentication
43
+ *
44
+ * @param {object} options
45
+ * @param {string} options.title - the name of the wiki page
46
+ * @param {string} options.body - the content of the wiki page
47
+ * @param {boolean} [options.locked] - if the wiki page should be locked (requires janitor)
48
+ * @param {boolean} [options.forceOverwrite] - if existing pages should be overwritten (requires janitor)
49
+ * @param {string} [options.reason] - the reson for creating the page
50
+ * @returns {Promise<WikiPage>}
51
+ */
52
+ create(options: CreateWikiPageOptions): Promise<WikiPage>;
53
+ /**
54
+ * modify a wiki page
55
+ *
56
+ * * Requires Authentication
57
+ *
58
+ * @param {number} id - the id of the wiki page to edit
59
+ * @param {object} options
60
+ * @param {string} [options.name] - the name of the wiki page (requires janitor)
61
+ * @param {string} [options.body] - the content of the wiki page
62
+ * @param {boolean} [options.locked] - if the wiki page is locked (requires janitor)
63
+ * @param {boolean} [options.forceOverwrite] - if existing pages should be overwritten (title change, requires janitor)
64
+ * @param {string} [options.reason] - the reason for the edit
65
+ * @returns {Promise<WikiPage>}
66
+ */
67
+ modify(id: number, options: ModifyWikiPageOptions): Promise<WikiPage>;
68
+ /**
69
+ * Delete a wiki page
70
+ *
71
+ * * Requires Authentication
72
+ *
73
+ * * Requires Janitor
74
+ *
75
+ * @param {number} id - the id of the wiki page to delete
76
+ * @returns {Promise<null>}
77
+ */
78
+ delete(id: number): Promise<null>;
79
+ /**
80
+ * Revert a wiki page to a previous version
81
+ *
82
+ * * Requires Authentication
83
+ *
84
+ * @param {number} id - the id of the wiki page to revert
85
+ * @param {number} versionID - the version id to revert to (see history)
86
+ */
87
+ revert(id: number, versionID: number): Promise<null>;
88
+ /**
89
+ * Search the wiki page history
90
+ *
91
+ * @param {object} [options]
92
+ * @param {number} [options.wikiPage] - narrow the results by the wiki page id
93
+ * @param {(number |`${"" | "a" | "b"}${number}`)} [options.page] - page of results to get
94
+ * @param {number} [options.limit] - limit the maximum amount of results returned
95
+ * @param
96
+ * @returns {Promise<Array<WikiPageHistory>>}
97
+ */
98
+ searchHistory(options?: SearchWikiPageHistoryOptions): Promise<WikiPageHistory[]>;
99
+ }