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,120 @@
1
+ import type E621 from "..";
2
+ import Pool from "../structures/Pool";
3
+ import PoolHistory from "../structures/PoolHistory";
4
+ import type { SearchPoolsOptions, CreatePoolOptions, ModifyPoolOptions, SearchPoolHistoryOptions } from "../types";
5
+ export default class Pools {
6
+ private readonly auth;
7
+ private readonly main;
8
+ constructor(main: E621);
9
+ /**
10
+ * Get a pool by its id
11
+ *
12
+ * @param {number} id - The id of the pool to get
13
+ * @returns {Promise<(Pool | null)>}
14
+ */
15
+ get(id: number): Promise<Pool | null>;
16
+ /**
17
+ * Get a pool by its name
18
+ *
19
+ * @param {string} name - The name of the pool to get
20
+ * @returns {Promise<(Pool | null)>}
21
+ */
22
+ getByName(name: string): Promise<Pool | null>;
23
+ /**
24
+ * Search for pools
25
+ *
26
+ * @param {object} [options]
27
+ * @param {string} [options.name] - narrow the results by the name of the pool
28
+ * @param {string} [options.description] - narrow the results by the description of the pool
29
+ * @param {string} [options.creator] - narrow the results by the (name of the) creator of the pool
30
+ * @param {boolean} [options.active] - narrow the results by the pool being active or not
31
+ * @param {PoolCategory} [options.category] - narrow the results by the category of the pool
32
+ * @param {PoolOrder} [options.order] - the order of the results
33
+ * @param {number} [options.page] - page of results to get
34
+ * @param {number} [options.limit] - limit the maximum amount of results returned
35
+ * @returns {Promise<Array<Pool>>}
36
+ */
37
+ search(options?: SearchPoolsOptions): Promise<Pool[]>;
38
+ /**
39
+ * Create a pool
40
+ *
41
+ * * Requires Authentication
42
+ *
43
+ * @param {object} options
44
+ * @param {string} options.name - the name of the pool
45
+ * @param {string} [options.description] - the description of the pool
46
+ * @param {Array<number>} [options.posts] - the posts to add to the pool
47
+ * @param {PoolCategory} options.category - the category of the pool
48
+ * @param {boolean} [options.active] - if the pool is active
49
+ * @returns {Promise<Pool>}
50
+ */
51
+ create(options: CreatePoolOptions): Promise<Pool>;
52
+ /**
53
+ * modify a pool
54
+ *
55
+ * * Requires Authentication
56
+ *
57
+ * @param {number} id - the id of the pool to edit
58
+ * @param {object} options
59
+ * @param {string} [options.name] - the name of the pool
60
+ * @param {string} [options.description] - the description of the pool
61
+ * @param {Array<number>} [options.posts] - the posts to include in the pool (this will override all currently included posts)
62
+ * @param {boolean} [options.category] - the category of the pool
63
+ * @param {boolean} [options.active] - if the pool is active
64
+ * @returns {Promise<Pool>}
65
+ */
66
+ modify(id: number, options: ModifyPoolOptions): Promise<Pool>;
67
+ /**
68
+ * Delete a pool
69
+ *
70
+ * * Requires Authentication
71
+ *
72
+ * * Requires Janitor
73
+ *
74
+ * @param {number} id - the id of the pool to delete
75
+ * @returns {Promise<null>}
76
+ */
77
+ delete(id: number): Promise<null>;
78
+ /**
79
+ * Revert a pool to a previous version
80
+ *
81
+ * * Requires Authentication
82
+ *
83
+ * @param {number} id - the id of the pool to revert
84
+ * @param {number} versionID - the version id to revert to (see history)
85
+ */
86
+ revert(id: number, versionID: number): Promise<null>;
87
+ /**
88
+ * Search the pool history
89
+ *
90
+ * @param {object} [options]
91
+ * @param {number} [options.pool] - narrow the results by the pool id
92
+ * @param {number} [options.page] - page of results to get
93
+ * @param {number} [options.limit] - limit the maximum amount of results returned
94
+ * @param
95
+ * @returns {Promise<Array<PoolHistory>>}
96
+ */
97
+ searchHistory(options?: SearchPoolHistoryOptions): Promise<PoolHistory[]>;
98
+ /**
99
+ * Add a post to a pool
100
+ *
101
+ * * Requires Authentication
102
+ *
103
+ * @param {number} id - the id of the pool to add to
104
+ * @param {(Array<number> | number)} posts - the post id (or multiple) to add to the pool
105
+ * @returns {Promise<Pool>}
106
+ */
107
+ addPost(id: number, posts: Array<number> | number): Promise<Pool>;
108
+ get addPosts(): (id: number, posts: number | number[]) => Promise<Pool>;
109
+ /**
110
+ * Remove a post from a pool
111
+ *
112
+ * * Requires Authentication
113
+ *
114
+ * @param {number} id - the id of the pool to remove from
115
+ * @param {(Array<number> | number)} posts - the post id (or multiple) to remove from the pool
116
+ * @returns {Promise<Pool>}
117
+ */
118
+ removePost(id: number, posts: Array<number> | number): Promise<Pool>;
119
+ get removePosts(): (id: number, posts: number | number[]) => Promise<Pool>;
120
+ }
@@ -0,0 +1,247 @@
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 Pool_1 = __importDefault(require("../structures/Pool"));
7
+ const PoolHistory_1 = __importDefault(require("../structures/PoolHistory"));
8
+ const FormHelper_1 = __importDefault(require("../util/FormHelper"));
9
+ const RequestHandler_1 = require("../util/RequestHandler");
10
+ class Pools {
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 pool by its id
32
+ *
33
+ * @param {number} id - The id of the pool to get
34
+ * @returns {Promise<(Pool | null)>}
35
+ */
36
+ async get(id) {
37
+ const res = await this.main.request.get(`/pools/${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 Pool_1.default(this.main, res);
43
+ }
44
+ /**
45
+ * Get a pool by its name
46
+ *
47
+ * @param {string} name - The name of the pool to get
48
+ * @returns {Promise<(Pool | null)>}
49
+ */
50
+ async getByName(name) {
51
+ return this.search({
52
+ name,
53
+ limit: 1
54
+ }).then(r => r.length === 0 ? null : r[0]);
55
+ }
56
+ /**
57
+ * Search for pools
58
+ *
59
+ * @param {object} [options]
60
+ * @param {string} [options.name] - narrow the results by the name of the pool
61
+ * @param {string} [options.description] - narrow the results by the description of the pool
62
+ * @param {string} [options.creator] - narrow the results by the (name of the) creator of the pool
63
+ * @param {boolean} [options.active] - narrow the results by the pool being active or not
64
+ * @param {PoolCategory} [options.category] - narrow the results by the category of the pool
65
+ * @param {PoolOrder} [options.order] - the order of the results
66
+ * @param {number} [options.page] - page of results to get
67
+ * @param {number} [options.limit] - limit the maximum amount of results returned
68
+ * @returns {Promise<Array<Pool>>}
69
+ */
70
+ async search(options) {
71
+ options = options ?? {};
72
+ const qs = new FormHelper_1.default();
73
+ if (typeof options.name === "string")
74
+ qs.add("search[name_matches]", options.name);
75
+ if (typeof options.description === "string")
76
+ qs.add("search[description_matches]", options.description);
77
+ if (typeof options.creator === "string")
78
+ qs.add("search[creator_name]", options.creator);
79
+ if (typeof options.active === "boolean")
80
+ qs.add("search[is_active]", options.active);
81
+ if (typeof options.category === "string")
82
+ qs.add("search[category]", options.category);
83
+ if (typeof options.order === "string")
84
+ qs.add("search[order]", options.order);
85
+ if (typeof options.page === "number")
86
+ qs.add("page", options.page);
87
+ if (typeof options.limit === "number")
88
+ qs.add("limit", options.limit);
89
+ const res = await this.main.request.get(`/pools.json?${qs.build()}`);
90
+ return res.map(info => new Pool_1.default(this.main, info));
91
+ }
92
+ /**
93
+ * Create a pool
94
+ *
95
+ * * Requires Authentication
96
+ *
97
+ * @param {object} options
98
+ * @param {string} options.name - the name of the pool
99
+ * @param {string} [options.description] - the description of the pool
100
+ * @param {Array<number>} [options.posts] - the posts to add to the pool
101
+ * @param {PoolCategory} options.category - the category of the pool
102
+ * @param {boolean} [options.active] - if the pool is active
103
+ * @returns {Promise<Pool>}
104
+ */
105
+ async create(options) {
106
+ this.main.request.authCheck.call(this, "Pools#create");
107
+ if (!options)
108
+ throw new Error("options is required in Pools#create");
109
+ const qs = new FormHelper_1.default()
110
+ .add("pool[name]", options.name)
111
+ .add("pool[category]", options.category);
112
+ if (typeof options.description === "string")
113
+ qs.add("pool[description]", options.description);
114
+ if (typeof options.active === "boolean")
115
+ qs.add("pool[is_active]", options.active);
116
+ if (Array.isArray(options.posts) && options.posts.length > 0)
117
+ qs.add("pool[post_ids_string]", options.posts.join(" "));
118
+ const res = await this.main.request.post("/pools.json", qs.build());
119
+ return new Pool_1.default(this.main, res);
120
+ }
121
+ /**
122
+ * modify a pool
123
+ *
124
+ * * Requires Authentication
125
+ *
126
+ * @param {number} id - the id of the pool to edit
127
+ * @param {object} options
128
+ * @param {string} [options.name] - the name of the pool
129
+ * @param {string} [options.description] - the description of the pool
130
+ * @param {Array<number>} [options.posts] - the posts to include in the pool (this will override all currently included posts)
131
+ * @param {boolean} [options.category] - the category of the pool
132
+ * @param {boolean} [options.active] - if the pool is active
133
+ * @returns {Promise<Pool>}
134
+ */
135
+ async modify(id, options) {
136
+ this.main.request.authCheck.call(this, "Pools#modify");
137
+ if (!options)
138
+ throw new Error("options is required in Pools#modify");
139
+ const qs = new FormHelper_1.default();
140
+ if (typeof options.name === "string")
141
+ qs.add("pool[name]", options.name);
142
+ if (typeof options.description === "string")
143
+ qs.add("pool[description]", options.description);
144
+ if (typeof options.category === "string")
145
+ qs.add("pool[category]", options.category);
146
+ if (typeof options.active === "boolean")
147
+ qs.add("pool[is_active]", options.active);
148
+ if (Array.isArray(options.posts) && options.posts.length > 0)
149
+ qs.add("pool[post_ids]", options.posts.join(" "));
150
+ const res = await this.main.request.put(`/pools/${id}.json`, qs.build());
151
+ return new Pool_1.default(this.main, res);
152
+ }
153
+ /**
154
+ * Delete a pool
155
+ *
156
+ * * Requires Authentication
157
+ *
158
+ * * Requires Janitor
159
+ *
160
+ * @param {number} id - the id of the pool to delete
161
+ * @returns {Promise<null>}
162
+ */
163
+ async delete(id) {
164
+ this.main.request.authCheck.call(this, "Pools#delete");
165
+ return this.main.request.delete(`/pools/${id}.json`);
166
+ }
167
+ /**
168
+ * Revert a pool to a previous version
169
+ *
170
+ * * Requires Authentication
171
+ *
172
+ * @param {number} id - the id of the pool to revert
173
+ * @param {number} versionID - the version id to revert to (see history)
174
+ */
175
+ async revert(id, versionID) {
176
+ this.main.request.authCheck.call(this, "Pools#revert");
177
+ const qs = new FormHelper_1.default()
178
+ .add("version_id", versionID);
179
+ return this.main.request.put(`/pools/${id}/revert.json`, qs.build());
180
+ }
181
+ /**
182
+ * Search the pool history
183
+ *
184
+ * @param {object} [options]
185
+ * @param {number} [options.pool] - narrow the results by the pool id
186
+ * @param {number} [options.page] - page of results to get
187
+ * @param {number} [options.limit] - limit the maximum amount of results returned
188
+ * @param
189
+ * @returns {Promise<Array<PoolHistory>>}
190
+ */
191
+ async searchHistory(options) {
192
+ options = options ?? {};
193
+ const qs = new FormHelper_1.default();
194
+ if (typeof options.pool === "number")
195
+ qs.add("search[pool_id]", options.pool);
196
+ if (typeof options.page === "number")
197
+ qs.add("page", options.page);
198
+ if (typeof options.limit === "number")
199
+ qs.add("limit", options.limit);
200
+ const res = await this.main.request.get(`/pool_versions.json?${qs.build()}`);
201
+ return res.map(info => new PoolHistory_1.default(this.main, info));
202
+ }
203
+ /**
204
+ * Add a post to a pool
205
+ *
206
+ * * Requires Authentication
207
+ *
208
+ * @param {number} id - the id of the pool to add to
209
+ * @param {(Array<number> | number)} posts - the post id (or multiple) to add to the pool
210
+ * @returns {Promise<Pool>}
211
+ */
212
+ async addPost(id, posts) {
213
+ this.main.request.authCheck.call(this, "Pools#addPost");
214
+ const old = await this.get(id);
215
+ if (old === null)
216
+ throw new Error("invalid pool id given to Pools#addPost");
217
+ if (!Array.isArray(posts))
218
+ posts = [posts];
219
+ return this.modify(id, {
220
+ posts: [...old.post_ids, ...posts]
221
+ });
222
+ }
223
+ get addPosts() { return this.addPost.bind(this); }
224
+ /**
225
+ * Remove a post from a pool
226
+ *
227
+ * * Requires Authentication
228
+ *
229
+ * @param {number} id - the id of the pool to remove from
230
+ * @param {(Array<number> | number)} posts - the post id (or multiple) to remove from the pool
231
+ * @returns {Promise<Pool>}
232
+ */
233
+ async removePost(id, posts) {
234
+ this.main.request.authCheck.call(this, "Pools#removePost");
235
+ const old = await this.get(id);
236
+ if (old === null)
237
+ throw new Error("invalid pool id given to Pools#addPost");
238
+ if (!Array.isArray(posts))
239
+ posts = [posts];
240
+ return this.modify(id, {
241
+ posts: old.post_ids.filter(p => !posts.includes(p))
242
+ });
243
+ }
244
+ get removePosts() { return this.removePost.bind(this); }
245
+ }
246
+ exports.default = Pools;
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kdWxlcy9Qb29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLDhEQUFzQztBQUN0Qyw0RUFBb0Q7QUFXcEQsb0VBQTRDO0FBQzVDLDJEQUFrRDtBQUVsRCxNQUFxQixLQUFLO0lBQ1IsSUFBSSxDQUFnQjtJQUNwQixJQUFJLENBQU87SUFDNUIsWUFBWSxJQUFVO1FBQ3JCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDN0IsSUFBSSxFQUFFO2dCQUNMLEdBQUc7b0JBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDbkwsQ0FBQztnQkFDRCxZQUFZLEVBQUUsS0FBSztnQkFDbkIsVUFBVSxFQUFFLEtBQUs7YUFDakI7WUFDRCxJQUFJLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixRQUFRLEVBQUUsS0FBSzthQUNmO1NBQ0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFVO1FBQ25CLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFpQixVQUFVLEVBQUUsT0FBTyxD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
@@ -0,0 +1,88 @@
1
+ import type E621 from "..";
2
+ import PostSet from "../structures/PostSet";
3
+ import type { SearchPostSetsOptions, CreatePostSetOptions, ModifyPostSetOptions } from "../types";
4
+ export default class PostSets {
5
+ private readonly auth;
6
+ private readonly main;
7
+ constructor(main: E621);
8
+ /**
9
+ * Get a post set by its id
10
+ *
11
+ * @param {(number | string)} id - The id of the post set to get
12
+ * @returns {Promise<(PostSet | null)>}
13
+ */
14
+ get(id: number | string): Promise<PostSet | null>;
15
+ /**
16
+ * Search for post sets
17
+ *
18
+ * @param {object} [options]
19
+ * @param {string} [options.name] - the name of the set
20
+ * @param {string} [options.shortname] - the shortname of the set
21
+ * @param {string} [options.username] - the creator of the set
22
+ * @param {PostSetOrder} [options.order] - the order of the results
23
+ * @param {(number |`${"" | "a" | "b"}${number}`)} [options.page] - page of results to get
24
+ * @param {number} [options.limit] - limit the maximum amount of results returned
25
+ * @returns {Promise<Array<PostSet>>}
26
+ */
27
+ search(options?: SearchPostSetsOptions): Promise<PostSet[]>;
28
+ /**
29
+ * Create a post set
30
+ *
31
+ * * Requires Authentication
32
+ *
33
+ * @param {object} options
34
+ * @param {string} options.name - the name of the set
35
+ * @param {string} options.shortname - the shortname of the set
36
+ * @param {string} [options.description] - the description of the set
37
+ * @param {boolean} [options.public] - if the set is public
38
+ * @param {boolean} [options.transferOnDeletion] - if deleted posts should be replaced with parents
39
+ * @returns {Promise<PostSet>}
40
+ */
41
+ create(options: CreatePostSetOptions): Promise<PostSet>;
42
+ /**
43
+ * modify a set
44
+ *
45
+ * * Requires Authentication
46
+ *
47
+ * @param {number} id - the id of the set to edit
48
+ * @param {object} options
49
+ * @param {string} [options.name] - the name of the set
50
+ * @param {string} [options.shortname] - the short name of the set
51
+ * @param {string} [options.description] - the description of the set
52
+ * @param {boolean} [options.active] - if the set is public
53
+ * @param {boolean} [options.transferOnDeletion] - if deleted posts should be replaced with parents
54
+ * @returns {Promise<PostSet>}
55
+ */
56
+ modify(id: number, options: ModifyPostSetOptions): Promise<PostSet>;
57
+ /**
58
+ * Delete a set
59
+ *
60
+ * * Requires Authentication
61
+ *
62
+ * @param {number} id - the id of the set to delete
63
+ * @returns {Promise<null>}
64
+ */
65
+ delete(id: number): Promise<null>;
66
+ /**
67
+ * Add a post (or multiple) to a set
68
+ *
69
+ * * Requires Authentication
70
+ *
71
+ * @param {number} id - the id of the set to add to
72
+ * @param {(Array<number> | number)} posts - the post id (or multiple) to add to the set
73
+ * @returns {Promise<PostSet>}
74
+ */
75
+ addPost(id: number, posts: Array<number> | number): Promise<PostSet>;
76
+ get addPosts(): (id: number, posts: number | number[]) => Promise<PostSet>;
77
+ /**
78
+ * Remove a post (or multiple) from a set
79
+ *
80
+ * * Requires Authentication
81
+ *
82
+ * @param {number} id - the id of the set to remove from
83
+ * @param {(Array<number> | number)} posts - the post id (or multiple) to remove from the set
84
+ * @returns {Promise<PostSet>}
85
+ */
86
+ removePost(id: number, posts: Array<number> | number): Promise<PostSet>;
87
+ get removePosts(): (id: number, posts: number | number[]) => Promise<PostSet>;
88
+ }
@@ -0,0 +1,182 @@
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 PostSet_1 = __importDefault(require("../structures/PostSet"));
7
+ const FormHelper_1 = __importDefault(require("../util/FormHelper"));
8
+ const RequestHandler_1 = require("../util/RequestHandler");
9
+ class PostSets {
10
+ auth;
11
+ main;
12
+ constructor(main) {
13
+ Object.defineProperties(this, {
14
+ auth: {
15
+ get() {
16
+ return !this.main.options.authUser || !this.main.options.authKey ? null : `Basic ${Buffer.from(`${this.main.options.authUser}:${this.main.options.authKey}`).toString("base64")}`;
17
+ },
18
+ configurable: false,
19
+ enumerable: false
20
+ },
21
+ main: {
22
+ value: main,
23
+ configurable: false,
24
+ enumerable: false,
25
+ writable: false
26
+ }
27
+ });
28
+ }
29
+ /**
30
+ * Get a post set by its id
31
+ *
32
+ * @param {(number | string)} id - The id of the post set to get
33
+ * @returns {Promise<(PostSet | null)>}
34
+ */
35
+ async get(id) {
36
+ const res = await this.main.request.get(`/post_sets/${id}.json`).catch(err => {
37
+ if (err instanceof RequestHandler_1.APIError && err.statusCode === 404)
38
+ return null;
39
+ throw err;
40
+ });
41
+ return res === null ? null : new PostSet_1.default(this.main, res);
42
+ }
43
+ /**
44
+ * Search for post sets
45
+ *
46
+ * @param {object} [options]
47
+ * @param {string} [options.name] - the name of the set
48
+ * @param {string} [options.shortname] - the shortname of the set
49
+ * @param {string} [options.username] - the creator of the set
50
+ * @param {PostSetOrder} [options.order] - the order of the results
51
+ * @param {(number |`${"" | "a" | "b"}${number}`)} [options.page] - page of results to get
52
+ * @param {number} [options.limit] - limit the maximum amount of results returned
53
+ * @returns {Promise<Array<PostSet>>}
54
+ */
55
+ async search(options) {
56
+ options = options ?? {};
57
+ const qs = new FormHelper_1.default();
58
+ if (typeof options.name === "string")
59
+ qs.add("search[name]", options.name);
60
+ if (typeof options.shortname === "string")
61
+ qs.add("search[shortname]", options.shortname);
62
+ if (typeof options.username === "string")
63
+ qs.add("search[creator_name]", options.username);
64
+ if (typeof options.order === "string")
65
+ qs.add("search[order]", options.order);
66
+ if (typeof options.page !== "undefined")
67
+ qs.add("page", options.page);
68
+ if (typeof options.limit === "number")
69
+ qs.add("limit", options.limit);
70
+ const res = await this.main.request.get(`/posts_sets.json?${qs.build()}`);
71
+ return res.post_sets.map(info => new PostSet_1.default(this.main, info));
72
+ }
73
+ /**
74
+ * Create a post set
75
+ *
76
+ * * Requires Authentication
77
+ *
78
+ * @param {object} options
79
+ * @param {string} options.name - the name of the set
80
+ * @param {string} options.shortname - the shortname of the set
81
+ * @param {string} [options.description] - the description of the set
82
+ * @param {boolean} [options.public] - if the set is public
83
+ * @param {boolean} [options.transferOnDeletion] - if deleted posts should be replaced with parents
84
+ * @returns {Promise<PostSet>}
85
+ */
86
+ async create(options) {
87
+ this.main.request.authCheck.call(this, "PostSets#create");
88
+ if (!options)
89
+ throw new Error("options is required in PostSets#create");
90
+ const qs = new FormHelper_1.default();
91
+ if (typeof options.name === "string")
92
+ qs.add("post_set[name]", options.name);
93
+ if (typeof options.shortname === "string")
94
+ qs.add("post_set[shortname]", options.shortname);
95
+ if (typeof options.description === "string")
96
+ qs.add("post_set[description]", options.description);
97
+ if (typeof options.public === "boolean")
98
+ qs.add("post_set[is_public]", options.public);
99
+ if (typeof options.transferOnDeletion === "boolean")
100
+ qs.add("post_set[transfer_on_delete]", options.transferOnDeletion);
101
+ const res = await this.main.request.post("/posts_sets.json", qs.build());
102
+ return new PostSet_1.default(this.main, res);
103
+ }
104
+ /**
105
+ * modify a set
106
+ *
107
+ * * Requires Authentication
108
+ *
109
+ * @param {number} id - the id of the set to edit
110
+ * @param {object} options
111
+ * @param {string} [options.name] - the name of the set
112
+ * @param {string} [options.shortname] - the short name of the set
113
+ * @param {string} [options.description] - the description of the set
114
+ * @param {boolean} [options.active] - if the set is public
115
+ * @param {boolean} [options.transferOnDeletion] - if deleted posts should be replaced with parents
116
+ * @returns {Promise<PostSet>}
117
+ */
118
+ async modify(id, options) {
119
+ this.main.request.authCheck.call(this, "PostSet#modify");
120
+ if (!options)
121
+ throw new Error("options is required in PostSets#modify");
122
+ const qs = new FormHelper_1.default();
123
+ if (typeof options.name === "string")
124
+ qs.add("post_set[name]", options.name);
125
+ if (typeof options.shortname === "string")
126
+ qs.add("post_set[shortname]", options.shortname);
127
+ if (typeof options.description === "string")
128
+ qs.add("post_set[description]", options.description);
129
+ if (typeof options.public === "boolean")
130
+ qs.add("post_set[is_public]", options.public);
131
+ if (typeof options.transferOnDeletion === "boolean")
132
+ qs.add("post_set[transfer_on_delete]", options.transferOnDeletion);
133
+ const res = await this.main.request.patch(`/post_sets/${id}.json`, qs.build());
134
+ return new PostSet_1.default(this.main, res);
135
+ }
136
+ /**
137
+ * Delete a set
138
+ *
139
+ * * Requires Authentication
140
+ *
141
+ * @param {number} id - the id of the set to delete
142
+ * @returns {Promise<null>}
143
+ */
144
+ async delete(id) {
145
+ this.main.request.authCheck.call(this, "PostSets#delete");
146
+ return this.main.request.delete(`/post_sets/${id}.json`);
147
+ }
148
+ /**
149
+ * Add a post (or multiple) to a set
150
+ *
151
+ * * Requires Authentication
152
+ *
153
+ * @param {number} id - the id of the set to add to
154
+ * @param {(Array<number> | number)} posts - the post id (or multiple) to add to the set
155
+ * @returns {Promise<PostSet>}
156
+ */
157
+ async addPost(id, posts) {
158
+ const qs = new FormHelper_1.default();
159
+ (Array.isArray(posts) ? posts : [posts]).map(p => qs.add("post_ids[]", p));
160
+ const res = await this.main.request.post(`/post_sets/${id}/add_posts.json`, qs.build());
161
+ return new PostSet_1.default(this.main, res);
162
+ }
163
+ get addPosts() { return this.addPost.bind(this); }
164
+ /**
165
+ * Remove a post (or multiple) from a set
166
+ *
167
+ * * Requires Authentication
168
+ *
169
+ * @param {number} id - the id of the set to remove from
170
+ * @param {(Array<number> | number)} posts - the post id (or multiple) to remove from the set
171
+ * @returns {Promise<PostSet>}
172
+ */
173
+ async removePost(id, posts) {
174
+ const qs = new FormHelper_1.default();
175
+ (Array.isArray(posts) ? posts : [posts]).map(p => qs.add("post_ids[]", p));
176
+ const res = await this.main.request.post(`/post_sets/${id}/remove_posts.json`, qs.build());
177
+ return new PostSet_1.default(this.main, res);
178
+ }
179
+ get removePosts() { return this.removePost.bind(this); }
180
+ }
181
+ exports.default = PostSets;
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9zdFNldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kdWxlcy9Qb3N0U2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLG9FQUE0QztBQVE1QyxvRUFBNEM7QUFDNUMsMkRBQWtEO0FBRWxELE1BQXFCLFFBQVE7SUFDWCxJQUFJLENBQWdCO0lBQ3BCLElBQUksQ0FBTztJQUM1QixZQUFZLElBQVU7UUFDckIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRTtZQUM3QixJQUFJLEVBQUU7Z0JBQ0wsR0FBRztvQkFDRixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNuTCxDQUFDO2dCQUNELFlBQVksRUFBRSxLQUFLO2dCQUNuQixVQUFVLEVBQUUsS0FBSzthQUNqQjtZQUNELElBQUksRUFBRTtnQkFDTCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxZQUFZLEVBQUUsS0FBSztnQkFDbkIsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFFBQVEsRUFBRSxLQUFLO2FBQ2Y7U0FDRCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQW1CO1FBQzVCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFvQixjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9GLElBQUksR0FBRyxZQUFZLHlCQUFRLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxHQUFHO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ25FLE1BQU0sR0FBRyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUErQjtRQUMzQyxPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUN4QixNQUFNLEVBQUUsR0FBRyxJQUFJLG9CQUFVLEVBQUUsQ0FBQztRQUM1QixJQUFJLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBVSxRQUFRO1lBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25GLElBQUksT0FBTyxPQUFPLENBQUMsU0FBUyxLQUFLLFFBQVE7WUFBSyxFQUFFLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RixJQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsS0FBTSxRQUFRO1lBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0YsSUFBSSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQVMsUUFBUTtZQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRixJQUFJLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBVSxXQUFXO1lBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNFLElBQUksT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFTLFFBQVE7WUFBSyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0UsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQTJDLG9CQUFvQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BILE9BQU8sR0FBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLGlCQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQTZCO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDeEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBVSxFQUFFLENBQUM7UUFDNUIsSUFBSSxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQW1CLFFBQVE7WUFBRyxFQUFFLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RixJQUFJLE9BQU8sT0FBTyxDQUFDLFNBQVMsS0FBYyxRQUFRO1lBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEcsSUFBSSxPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQVksUUFBUTtZQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFHLElBQUksT0FBTyxPQUFPLENBQUMsTUFBTSxLQUFpQixTQUFTO1lBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkcsSUFBSSxPQUFPLE9BQU8sQ0FBQyxrQkFBa0IsS0FBSyxTQUFTO1lBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN4SCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBb0Isa0JBQWtCLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUYsT0FBTyxJQUFJLGlCQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBVSxFQUFFLE9BQTZCO1FBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDeEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBVSxFQUFFLENBQUM7UUFDNUIsSUFBSSxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQW1CLFFBQVE7WUFBRyxFQUFFLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RixJQUFJLE9BQU8sT0FBTyxDQUFDLFNBQVMsS0FBYyxRQUFRO1lBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEcsSUFBSSxPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQVksUUFBUTtZQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFHLElBQUksT0FBTyxPQUFPLENBQUMsTUFBTSxLQUFpQixTQUFTO1lBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkcsSUFBSSxPQUFPLE9BQU8sQ0FBQyxrQkFBa0IsS0FBSyxTQUFTO1lBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN4SCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBb0IsY0FBYyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNsRyxPQUFPLElBQUksaUJBQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFVO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQU8sY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBVSxFQUFFLEtBQTZCO1FBQ3RELE1BQU0sRUFBRSxHQUFHLElBQUksb0JBQVUsRUFBRSxDQUFDO1FBQzVCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBb0IsY0FBYyxFQUFFLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLE9BQU8sSUFBSSxpQkFBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELElBQUksUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWxEOzs7Ozs7OztPQVFHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFVLEVBQUUsS0FBNkI7UUFDekQsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBVSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFvQixjQUFjLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDOUcsT0FBTyxJQUFJLGlCQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsSUFBSSxXQUFXLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEQ7QUEvSkQsMkJBK0pDIn0=