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,124 @@
1
+ import type E621 from "..";
2
+ import Post from "../structures/Post";
3
+ import PostHistory from "../structures/PostHistory";
4
+ import type { CreatePostOptions, SearchPostsOptions, ModifyPostOptions, PostVoteResult, SearchPostHistoryOptions } from "../types";
5
+ export default class Posts {
6
+ private readonly auth;
7
+ private readonly main;
8
+ constructor(main: E621);
9
+ /**
10
+ * Get a post by its id
11
+ *
12
+ * @param {(number | string)} id - The id of the post to get
13
+ * @returns {Promise<(Post | null)>}
14
+ */
15
+ get(id: number | string): Promise<Post | null>;
16
+ /**
17
+ * Get a post by its md5
18
+ *
19
+ * @param {string} md5 - The md5 of the post to get
20
+ * @returns {Promise<(Post | null)>}
21
+ */
22
+ getByMD5(md5: string): Promise<Post | null>;
23
+ /**
24
+ * Search for posts
25
+ *
26
+ * @param {object} [options]
27
+ * @param {(Array<string> | string)} [options.tags] - narrow the search by specific tags
28
+ * @param {(number |`${"" | "a" | "b"}${number}`)} [options.page] - number for exact page, a${number} posts after ${number}, b${number} posts before ${number}
29
+ * @param {number} [options.limit] - limit the maximum amount of results returned
30
+ * @returns {Promise<Array<Post>>}
31
+ */
32
+ search(options?: SearchPostsOptions): Promise<Post[]>;
33
+ /**
34
+ * Upload a post
35
+ *
36
+ * * Requires Authentication
37
+ *
38
+ * @param {object} options
39
+ * @param {(Array<string> | string)} options.tags - the tags for the post
40
+ * @param {Ratings} options.rating - the rating for the post
41
+ * @param {(Array<string> | string)} [options.sources] - the sources for the post
42
+ * @param {string} [options.description] - the description of the post
43
+ * @param {number} [options.parentID] - the parent of the post
44
+ * @param {string} [options.refererURL] - dunno, api doc specifies it though
45
+ * @param {string} [options.md5Confirmation] - confirm of the md5 of the uploaded file
46
+ * @param {boolean} [options.asPending] - upload as pending (requires approver)
47
+ * @param {boolean} [options.ratingLocked] - upload as rating locked (requires privileged)
48
+ * @param {(Array<string> | string)} [options.lockedTags] - tags to lock on the post (requires admin)
49
+ * @param {Buffer} [options.file] - file upload (mutually exclusive with fileURL, not well tested)
50
+ * @param {string} [options.fileURL] - url of file to upload (mutually exclusive with file)
51
+ * @returns {Promise<number>}
52
+ */
53
+ create(options: CreatePostOptions): Promise<number>;
54
+ /**
55
+ * Modify a post
56
+ *
57
+ * * Requires Authentication
58
+ *
59
+ * @param {object} options
60
+ * @param {string} [options.editReason] - the reason for the edit
61
+ * @param {(Array<string> | string)} [options.addTags] - the tags to add to the post
62
+ * @param {(Array<string> | string)} [options.removeTags] - the tags to remove from the post
63
+ * @param {(Array<string> | string)} [options.addSources] - the sources to add to the post
64
+ * @param {(Array<string> | string)} [options.removeSources] - the sources to remove from the post
65
+ * @param {Ratings} [options.rating] - the rating for the post
66
+ * @param {string} [options.description] - the description of the post
67
+ * @param {number} [options.parentID] - the parent of the post
68
+ * @param {boolean} [options.hasEmbeddedNotes] - I don't know what this is, api docs list it though
69
+ * @param {boolean} [options.ratingLocked] - upload as rating locked (requires privileged)
70
+ * @param {boolean} [options.noteLocked] - upload as rating locked (requires janitor)
71
+ * @param {boolean} [options.statusLocked] - upload as rating locked (requires admin)
72
+ * @param {boolean} [options.hideFromAnonymous] - upload as rating locked (requires admin)
73
+ * @param {boolean} [options.hideFromSearch] - upload as rating locked (requires admin)
74
+ * @param {string} [options.backgroundColor] - the background color of the post (requires janitor)
75
+ * @param {(Array<string> | string)} [options.lockedTags] - tags to lock on the post (requires admin)
76
+ * @returns {Promise<Post>}
77
+ */
78
+ modify(id: number, options: ModifyPostOptions): Promise<Post>;
79
+ /**
80
+ * Revert a post to a previous version
81
+ *
82
+ * * Requires Authentication
83
+ *
84
+ * @param {number} id - the id of the post 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 post history
90
+ *
91
+ * @param {object} [options]
92
+ * @param {string} [options.user] - narrow the results by username
93
+ * @param {number} [options.userID] - narrow the results by user id
94
+ * @param {number} [options.post] - narrow the results by post id
95
+ * @param {string} [options.reason] - narrow the results by edit reason
96
+ * @param {string} [options.description] - narrow the results by description content
97
+ * @param {Ratings} [options.ratingChangedTo] - narrow the results by rating change
98
+ * @param {Ratings} [options.finalRating] - narrow the results by final rating
99
+ * @param {number} [options.parent] - narrow the results by parent id
100
+ * @param {number} [options.parentChangedTo] - narrow the results by changed parent id
101
+ * @param {(Array<string> | string)} [options.finalTags] - narrow the results by final tags
102
+ * @param {(Array<string> | string)} [options.addedTags] - narrow the results by added tags
103
+ * @param {(Array<string> | string)} [options.removedTags] - narrow the results by removed tags
104
+ * @param {(Array<string> | string)} [options.finalLockedTags] - narrow the results by final locked tags
105
+ * @param {(Array<string> | string)} [options.addedLockedTags] - narrow the results by added locked tags
106
+ * @param {(Array<string> | string)} [options.removedLockedTags] - narrow the results by removed locked tags
107
+ * @param {string} [options.source] - narrow the results by sources
108
+ * @param {(number |`${"" | "a" | "b"}${number}`)} [options.page] - page of results to get
109
+ * @param {number} [options.limit] - limit the maximum amount of results returned
110
+ * @param
111
+ * @returns {Promise<Array<PostHistory>>}
112
+ */
113
+ searchHistory(options?: SearchPostHistoryOptions): Promise<PostHistory[]>;
114
+ /**
115
+ * Vote on a post
116
+ *
117
+ * * Requires Authentication
118
+ *
119
+ * @param {number} id - the id of the post to vote on
120
+ * @param {boolean} up - if the vote should be up or down
121
+ * @returns {Promise<PostVoteResult>}
122
+ */
123
+ vote(id: number, up: boolean): Promise<PostVoteResult>;
124
+ }
@@ -0,0 +1,323 @@
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 Post_1 = __importDefault(require("../structures/Post"));
7
+ const PostHistory_1 = __importDefault(require("../structures/PostHistory"));
8
+ const FormHelper_1 = __importDefault(require("../util/FormHelper"));
9
+ const RequestHandler_1 = require("../util/RequestHandler");
10
+ class Posts {
11
+ auth;
12
+ main;
13
+ constructor(main) {
14
+ Object.defineProperties(this, {
15
+ auth: {
16
+ get() {
17
+ return !this.main.options.authUser || !this.main.options.authKey ? null : `Basic ${Buffer.from(`${this.main.options.authUser}:${this.main.options.authKey}`).toString("base64")}`;
18
+ },
19
+ configurable: false,
20
+ enumerable: false
21
+ },
22
+ main: {
23
+ value: main,
24
+ configurable: false,
25
+ enumerable: false,
26
+ writable: false
27
+ }
28
+ });
29
+ }
30
+ /**
31
+ * Get a post by its id
32
+ *
33
+ * @param {(number | string)} id - The id of the post to get
34
+ * @returns {Promise<(Post | null)>}
35
+ */
36
+ async get(id) {
37
+ const res = await this.main.request.get(`/posts/${id}.json`).catch(err => {
38
+ if (err instanceof RequestHandler_1.APIError && err.statusCode === 404)
39
+ return null;
40
+ throw err;
41
+ });
42
+ return res === null ? null : new Post_1.default(this.main, res.post);
43
+ }
44
+ /**
45
+ * Get a post by its md5
46
+ *
47
+ * @param {string} md5 - The md5 of the post to get
48
+ * @returns {Promise<(Post | null)>}
49
+ */
50
+ async getByMD5(md5) {
51
+ const res = await this.main.request.get(`/posts.json?md5=${md5}`).catch(err => {
52
+ if (err instanceof RequestHandler_1.APIError && err.statusCode === 404)
53
+ return null;
54
+ throw err;
55
+ });
56
+ return res === null ? null : new Post_1.default(this.main, res.post);
57
+ }
58
+ /**
59
+ * Search for posts
60
+ *
61
+ * @param {object} [options]
62
+ * @param {(Array<string> | string)} [options.tags] - narrow the search by specific tags
63
+ * @param {(number |`${"" | "a" | "b"}${number}`)} [options.page] - number for exact page, a${number} posts after ${number}, b${number} posts before ${number}
64
+ * @param {number} [options.limit] - limit the maximum amount of results returned
65
+ * @returns {Promise<Array<Post>>}
66
+ */
67
+ async search(options) {
68
+ options = options ?? {};
69
+ const qs = new FormHelper_1.default();
70
+ if (Array.isArray(options.tags) || typeof options.tags === "string")
71
+ qs.add("tags", Array.isArray(options.tags) ? options.tags.join(" ") : options.tags);
72
+ if (typeof options.page !== "undefined")
73
+ qs.add("page", options.page);
74
+ if (typeof options.limit === "number" || typeof options.limit === "string")
75
+ qs.add("limit", options.limit);
76
+ const res = await this.main.request.get(`/posts.json?${qs.build()}`);
77
+ return res.posts.map(info => new Post_1.default(this.main, info));
78
+ }
79
+ /**
80
+ * Upload a post
81
+ *
82
+ * * Requires Authentication
83
+ *
84
+ * @param {object} options
85
+ * @param {(Array<string> | string)} options.tags - the tags for the post
86
+ * @param {Ratings} options.rating - the rating for the post
87
+ * @param {(Array<string> | string)} [options.sources] - the sources for the post
88
+ * @param {string} [options.description] - the description of the post
89
+ * @param {number} [options.parentID] - the parent of the post
90
+ * @param {string} [options.refererURL] - dunno, api doc specifies it though
91
+ * @param {string} [options.md5Confirmation] - confirm of the md5 of the uploaded file
92
+ * @param {boolean} [options.asPending] - upload as pending (requires approver)
93
+ * @param {boolean} [options.ratingLocked] - upload as rating locked (requires privileged)
94
+ * @param {(Array<string> | string)} [options.lockedTags] - tags to lock on the post (requires admin)
95
+ * @param {Buffer} [options.file] - file upload (mutually exclusive with fileURL, not well tested)
96
+ * @param {string} [options.fileURL] - url of file to upload (mutually exclusive with file)
97
+ * @returns {Promise<number>}
98
+ */
99
+ async create(options) {
100
+ this.main.request.authCheck.call(this, "Posts#create");
101
+ if (!options)
102
+ throw new Error("options is required for Posts#create");
103
+ if (!("fileURL" in options || "file" in options))
104
+ throw new Error("one of options.file, options.fileURL is required for Posts#create");
105
+ if ("fileURL" in options && "file" in options)
106
+ process.emitWarning("only one of options.file, options.fileURL should be provided to Posts#create. options.fileURL overrides options.file.");
107
+ const qs = new FormHelper_1.default();
108
+ if (typeof options.tags === "string")
109
+ qs.add("upload[tag_string]", options.tags);
110
+ if (typeof options.sources === "string")
111
+ qs.add("upload[source]", options.sources);
112
+ if (typeof options.lockedTags === "string")
113
+ qs.add("upload[locked_tags]", options.lockedTags);
114
+ if (Array.isArray(options.tags) && options.tags.length > 0)
115
+ qs.add("upload[tag_string]", options.tags.join(" "));
116
+ if (Array.isArray(options.sources) && options.sources.length > 0)
117
+ qs.add("upload[source]", options.sources.join("\n"));
118
+ if (Array.isArray(options.lockedTags) && options.lockedTags.length > 0)
119
+ qs.add("upload[locked_tags]", options.lockedTags.join("\n"));
120
+ if (typeof options.rating === "string")
121
+ qs.add("upload[rating]", options.rating);
122
+ if (typeof options.description === "string")
123
+ qs.add("upload[description]", options.description);
124
+ if (typeof options.parentID === "number")
125
+ qs.add("upload[parent_id]", options.parentID);
126
+ if (typeof options.refererURL === "string")
127
+ qs.add("upload[referer_url]", options.refererURL);
128
+ if (typeof options.asPending === "boolean")
129
+ qs.add("upload[as_pending]", options.asPending);
130
+ if (typeof options.md5Confirmation === "string")
131
+ qs.add("upload[md5_confirmation]", options.md5Confirmation);
132
+ if (typeof options.ratingLocked === "boolean")
133
+ qs.add("upload[locked_rating]", options.ratingLocked);
134
+ let res;
135
+ if ("fileURL" in options && typeof options.fileURL === "string") {
136
+ qs.add("upload[direct_url]", options.fileURL);
137
+ res = await this.main.request.post("/uploads.json", qs.build());
138
+ }
139
+ else if ("file" in options) {
140
+ res = await this.main.request.postWithFile("/uploads.json", qs, [{ content: options.file, name: "upload[file]" }]);
141
+ }
142
+ return res.post_id;
143
+ }
144
+ /**
145
+ * Modify a post
146
+ *
147
+ * * Requires Authentication
148
+ *
149
+ * @param {object} options
150
+ * @param {string} [options.editReason] - the reason for the edit
151
+ * @param {(Array<string> | string)} [options.addTags] - the tags to add to the post
152
+ * @param {(Array<string> | string)} [options.removeTags] - the tags to remove from the post
153
+ * @param {(Array<string> | string)} [options.addSources] - the sources to add to the post
154
+ * @param {(Array<string> | string)} [options.removeSources] - the sources to remove from the post
155
+ * @param {Ratings} [options.rating] - the rating for the post
156
+ * @param {string} [options.description] - the description of the post
157
+ * @param {number} [options.parentID] - the parent of the post
158
+ * @param {boolean} [options.hasEmbeddedNotes] - I don't know what this is, api docs list it though
159
+ * @param {boolean} [options.ratingLocked] - upload as rating locked (requires privileged)
160
+ * @param {boolean} [options.noteLocked] - upload as rating locked (requires janitor)
161
+ * @param {boolean} [options.statusLocked] - upload as rating locked (requires admin)
162
+ * @param {boolean} [options.hideFromAnonymous] - upload as rating locked (requires admin)
163
+ * @param {boolean} [options.hideFromSearch] - upload as rating locked (requires admin)
164
+ * @param {string} [options.backgroundColor] - the background color of the post (requires janitor)
165
+ * @param {(Array<string> | string)} [options.lockedTags] - tags to lock on the post (requires admin)
166
+ * @returns {Promise<Post>}
167
+ */
168
+ async modify(id, options) {
169
+ this.main.request.authCheck.call(this, "Posts#modify");
170
+ if (!options)
171
+ throw new Error("options is required for Posts#modify");
172
+ const qs = new FormHelper_1.default();
173
+ let tagDiff = "", sourceDiff = "";
174
+ if (typeof options.addTags === "string")
175
+ tagDiff += options.addTags;
176
+ if (Array.isArray(options.addTags) && options.addTags.length > 0)
177
+ tagDiff += options.addTags.join(" ");
178
+ if (typeof options.removeTags === "string")
179
+ tagDiff += options.removeTags.split(" ").map(t => `-${t}`).join(" ");
180
+ if (Array.isArray(options.removeTags) && options.removeTags.length > 0)
181
+ tagDiff += ` ${options.removeTags.map(t => `-${t}`).join(" ")}`;
182
+ if (typeof options.addSources === "string")
183
+ sourceDiff += options.addSources;
184
+ if (Array.isArray(options.addSources) && options.addSources.length > 0)
185
+ sourceDiff += options.addSources.join("\n");
186
+ if (typeof options.removeSources === "string")
187
+ sourceDiff += options.removeSources.split("\n").map(s => `-${s}`).join("\n");
188
+ if (Array.isArray(options.removeSources) && options.removeSources.length > 0)
189
+ sourceDiff += ` ${options.removeSources.map(s => `-${s}`).join("\n")}`;
190
+ if (tagDiff)
191
+ qs.add("post[tag_string_diff]", tagDiff.trim());
192
+ if (sourceDiff)
193
+ qs.add("post[source_diff]", sourceDiff.trim());
194
+ if (typeof options.lockedTags === "string")
195
+ qs.add("post[locked_tags]", options.lockedTags);
196
+ if (Array.isArray(options.lockedTags) && options.lockedTags.length > 0)
197
+ qs.add("post[locked_tags]", options.lockedTags.join("\n"));
198
+ if (typeof options.rating === "string")
199
+ qs.add("post[rating]", options.rating);
200
+ if (typeof options.description === "string")
201
+ qs.add("post[description]", options.description);
202
+ if (typeof options.parentID === "number")
203
+ qs.add("post[parent_id]", options.parentID);
204
+ if (typeof options.hasEmbeddedNotes === "boolean")
205
+ qs.add("post[has_embedded_notes]", options.hasEmbeddedNotes);
206
+ if (typeof options.ratingLocked === "boolean")
207
+ qs.add("post[is_rating_locked]", options.ratingLocked);
208
+ if (typeof options.noteLocked === "boolean")
209
+ qs.add("post[is_note_locked]", options.noteLocked);
210
+ if (typeof options.statusLocked === "boolean")
211
+ qs.add("post[is_status_locked]", options.statusLocked);
212
+ if (typeof options.hideFromAnonymous === "boolean")
213
+ qs.add("post[hide_from_anonymous]", options.hideFromAnonymous);
214
+ if (typeof options.hideFromSearch === "boolean")
215
+ qs.add("post[hide_from_search_engines]", options.hideFromSearch);
216
+ if (typeof options.backgroundColor === "string")
217
+ qs.add("post[bg_color]", options.backgroundColor);
218
+ if (typeof options.editReason === "string")
219
+ qs.add("post[edit_reason]", options.editReason);
220
+ const res = await this.main.request.patch(`/posts/${id}.json`, qs.build());
221
+ return new Post_1.default(this.main, res.post);
222
+ }
223
+ // @TODO delete/approved/unapproved - not a high priority
224
+ /**
225
+ * Revert a post to a previous version
226
+ *
227
+ * * Requires Authentication
228
+ *
229
+ * @param {number} id - the id of the post to revert
230
+ * @param {number} versionID - the version id to revert to (see history)
231
+ */
232
+ async revert(id, versionID) {
233
+ this.main.request.authCheck.call(this, "Posts#revert");
234
+ const qs = new FormHelper_1.default()
235
+ .add("version_id", versionID);
236
+ return this.main.request.put(`/posts/${id}/revert.json`, qs.build());
237
+ }
238
+ /**
239
+ * Search the post history
240
+ *
241
+ * @param {object} [options]
242
+ * @param {string} [options.user] - narrow the results by username
243
+ * @param {number} [options.userID] - narrow the results by user id
244
+ * @param {number} [options.post] - narrow the results by post id
245
+ * @param {string} [options.reason] - narrow the results by edit reason
246
+ * @param {string} [options.description] - narrow the results by description content
247
+ * @param {Ratings} [options.ratingChangedTo] - narrow the results by rating change
248
+ * @param {Ratings} [options.finalRating] - narrow the results by final rating
249
+ * @param {number} [options.parent] - narrow the results by parent id
250
+ * @param {number} [options.parentChangedTo] - narrow the results by changed parent id
251
+ * @param {(Array<string> | string)} [options.finalTags] - narrow the results by final tags
252
+ * @param {(Array<string> | string)} [options.addedTags] - narrow the results by added tags
253
+ * @param {(Array<string> | string)} [options.removedTags] - narrow the results by removed tags
254
+ * @param {(Array<string> | string)} [options.finalLockedTags] - narrow the results by final locked tags
255
+ * @param {(Array<string> | string)} [options.addedLockedTags] - narrow the results by added locked tags
256
+ * @param {(Array<string> | string)} [options.removedLockedTags] - narrow the results by removed locked tags
257
+ * @param {string} [options.source] - narrow the results by sources
258
+ * @param {(number |`${"" | "a" | "b"}${number}`)} [options.page] - page of results to get
259
+ * @param {number} [options.limit] - limit the maximum amount of results returned
260
+ * @param
261
+ * @returns {Promise<Array<PostHistory>>}
262
+ */
263
+ async searchHistory(options) {
264
+ options = options ?? {};
265
+ const qs = new FormHelper_1.default();
266
+ if (typeof options.user === "string")
267
+ qs.add("search[updater_name]", options.user);
268
+ if (typeof options.userID === "number")
269
+ qs.add("search[updater_id]", options.userID);
270
+ if (typeof options.post === "number")
271
+ qs.add("search[post_id]", options.post);
272
+ if (typeof options.reason === "string")
273
+ qs.add("search[reason]", options.reason);
274
+ if (typeof options.description === "string")
275
+ qs.add("search[description]", options.description);
276
+ if (typeof options.ratingChangedTo === "string")
277
+ qs.add("search[rating_changed]", options.ratingChangedTo);
278
+ if (typeof options.finalRating === "string")
279
+ qs.add("search[rating]", options.finalRating);
280
+ if (typeof options.parent === "number")
281
+ qs.add("search[parent_id]", options.parent);
282
+ if (typeof options.parentChangedTo === "string")
283
+ qs.add("search[parent_id_changed]", options.parentChangedTo);
284
+ if (typeof options.finalTags === "string")
285
+ qs.add("search[tags]", options.finalTags);
286
+ if (typeof options.addedTags === "string")
287
+ qs.add("search[tags_added]", options.addedTags);
288
+ if (typeof options.removedTags === "string")
289
+ qs.add("search[tags_removed]", options.removedTags);
290
+ if (typeof options.finalLockedTags === "string")
291
+ qs.add("search[locked_tags]", options.finalLockedTags);
292
+ if (typeof options.addedLockedTags === "string")
293
+ qs.add("search[locked_tags_added]", options.addedLockedTags);
294
+ if (typeof options.removedLockedTags === "string")
295
+ qs.add("search[locked_tags_removed]", options.removedLockedTags);
296
+ if (typeof options.source === "string")
297
+ qs.add("search[source]", options.source);
298
+ if (typeof options.page !== "undefined")
299
+ qs.add("page", options.page);
300
+ if (typeof options.limit === "number")
301
+ qs.add("limit", options.limit);
302
+ const res = await this.main.request.get(`/post_versions.json?${qs.build()}`);
303
+ return res.map(info => new PostHistory_1.default(this.main, info));
304
+ }
305
+ /**
306
+ * Vote on a post
307
+ *
308
+ * * Requires Authentication
309
+ *
310
+ * @param {number} id - the id of the post to vote on
311
+ * @param {boolean} up - if the vote should be up or down
312
+ * @returns {Promise<PostVoteResult>}
313
+ */
314
+ async vote(id, up) {
315
+ this.main.request.authCheck.call(this, "Posts#vote");
316
+ const qs = new FormHelper_1.default()
317
+ .add("score", up ? 1 : -1);
318
+ const res = await this.main.request.post(`/posts/${id}/votes.json`, qs.build());
319
+ return res;
320
+ }
321
+ }
322
+ exports.default = Posts;
323
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kdWxlcy9Qb3N0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLDhEQUFzQztBQUN0Qyw0RUFBb0Q7QUFZcEQsb0VBQTRDO0FBQzVDLDJEQUFrRDtBQUVsRCxNQUFxQixLQUFLO0lBQ1IsSUFBSSxDQUFnQjtJQUNwQixJQUFJLENBQU87SUFDNUIsWUFBWSxJQUFVO1FBQ3JCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDN0IsSUFBSSxFQUFFO2dCQUNMLEdBQUc7b0JBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDbkwsQ0FBQztnQkFDRCxZQUFZLEVBQUUsS0FBSztnQkFDbkIsVUFBVSxFQUFFLEtBQUs7YUFDakI7WUFDRCxJQUFJLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixRQUFRLEVBQUUsS0FBSzthQUNmO1NBQ0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFtQjtRQUM1QixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBNEIsVUFBVSxFQUFFLE9BQU8s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
@@ -0,0 +1,66 @@
1
+ import type E621 from "..";
2
+ import type { UserFeedbackProperties, SearchUserFeedbackOptions, CreateUserFeedbackOptions, ModifyUserFeedbackOptions } from "../types";
3
+ export default class UserFeedback {
4
+ private readonly auth;
5
+ private readonly main;
6
+ constructor(main: E621);
7
+ /**
8
+ * Get a specific user feedback
9
+ *
10
+ * @param {number} id - The id of the feedback to fetch
11
+ * @returns {Promise<(UserFeedbackProperties | null)>}
12
+ */
13
+ get(id: number): Promise<UserFeedbackProperties | null>;
14
+ /**
15
+ * Search for user feedback
16
+ *
17
+ * @param {object} [options]
18
+ * @param {string} [options.username] - narrow the search by a specific target
19
+ * @param {string} [options.creator] - narrow the search by a specific creator
20
+ * @param {string} [options.body] - narrow the search by the content of the feedback
21
+ * @param {FeedbackCategories} [options.category] - narrow the search by the type
22
+ * @param {(number |`${"" | "a" | "b"}${number}`)} - page of results to get
23
+ * @param {number} [options.limit] - limit the maximum returned results
24
+ * @returns {Promise<Array<UserFeedbackProperties>>}
25
+ */
26
+ search(options?: SearchUserFeedbackOptions): Promise<UserFeedbackProperties[]>;
27
+ /**
28
+ * Add feedback to a user
29
+ *
30
+ * * Requires Authentication
31
+ *
32
+ * * Requires Moderator
33
+ *
34
+ * @param {object} options
35
+ * @param {string} options.username - the user the feedback is for
36
+ * @param {FeedbackCategories} options.category - the type of feedback
37
+ * @param {string} options.body - the content of the feedback
38
+ * @returns {Promise<UserFeedbackProperties>}
39
+ */
40
+ create(options: CreateUserFeedbackOptions): Promise<UserFeedbackProperties>;
41
+ /**
42
+ * Modify an existing user feedback
43
+ *
44
+ * * Requires Authentication
45
+ *
46
+ * * Requires Moderator
47
+ *
48
+ * @param {number} id - the id of the feedback to edit
49
+ * @param {object} options
50
+ * @param {string} [options.body] - the content of the feedback
51
+ * @param {FeedbackCategories} [options.category] - the type of feedback
52
+ * @returns {Promise<UserFeedbackProperties>}
53
+ */
54
+ modify(id: number, options: ModifyUserFeedbackOptions): Promise<UserFeedbackProperties>;
55
+ /**
56
+ * Delete an existing user feedback
57
+ *
58
+ * * Requires Authentication
59
+ *
60
+ * * Requires Moderator
61
+ *
62
+ * @param {number} id - the id of the feedback to delete
63
+ * @returns {Promise<null>}
64
+ */
65
+ delete(id: number): Promise<null>;
66
+ }