sidechat.js 1.0.0 → 2.0.0-alpha.0

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/.github/workflows/static.yml +51 -0
  2. package/README.md +15 -1
  3. package/dist/sidechat.cjs +1 -1
  4. package/dist/sidechat.cjs.map +1 -1
  5. package/dist/sidechat.modern.js +1 -1
  6. package/dist/sidechat.modern.js.map +1 -1
  7. package/dist/sidechat.module.js +1 -1
  8. package/dist/sidechat.module.js.map +1 -1
  9. package/dist/sidechat.umd.js +1 -1
  10. package/dist/sidechat.umd.js.map +1 -1
  11. package/docs/sidechat.js/1.0.0/global.html +1 -1
  12. package/docs/sidechat.js/1.0.0/index.html +2 -1
  13. package/docs/sidechat.js/1.0.0/index.js.html +1 -3
  14. package/docs/sidechat.js/1.0.0/types_SidechatTypes.js.html +1 -1
  15. package/docs/sidechat.js/2.0.0-alpha.0/SidechatAPIClient.html +3 -0
  16. package/docs/sidechat.js/2.0.0-alpha.0/classes_SidechatAPIClient.js.html +374 -0
  17. package/docs/sidechat.js/2.0.0-alpha.0/data/search.json +1 -0
  18. package/docs/sidechat.js/2.0.0-alpha.0/fonts/Inconsolata-Regular.ttf +0 -0
  19. package/docs/sidechat.js/2.0.0-alpha.0/fonts/OpenSans-Regular.ttf +0 -0
  20. package/docs/sidechat.js/2.0.0-alpha.0/fonts/WorkSans-Bold.ttf +0 -0
  21. package/docs/sidechat.js/2.0.0-alpha.0/global.html +3 -0
  22. package/docs/sidechat.js/2.0.0-alpha.0/index.html +4 -0
  23. package/docs/sidechat.js/2.0.0-alpha.0/scripts/core.js +702 -0
  24. package/docs/sidechat.js/2.0.0-alpha.0/scripts/core.min.js +23 -0
  25. package/docs/sidechat.js/2.0.0-alpha.0/scripts/resize.js +90 -0
  26. package/docs/sidechat.js/2.0.0-alpha.0/scripts/search.js +265 -0
  27. package/docs/sidechat.js/2.0.0-alpha.0/scripts/search.min.js +6 -0
  28. package/docs/sidechat.js/2.0.0-alpha.0/scripts/third-party/Apache-License-2.0.txt +202 -0
  29. package/docs/sidechat.js/2.0.0-alpha.0/scripts/third-party/fuse.js +9 -0
  30. package/docs/sidechat.js/2.0.0-alpha.0/scripts/third-party/hljs-line-num-original.js +369 -0
  31. package/docs/sidechat.js/2.0.0-alpha.0/scripts/third-party/hljs-line-num.js +1 -0
  32. package/docs/sidechat.js/2.0.0-alpha.0/scripts/third-party/hljs-original.js +5171 -0
  33. package/docs/sidechat.js/2.0.0-alpha.0/scripts/third-party/hljs.js +1 -0
  34. package/docs/sidechat.js/2.0.0-alpha.0/scripts/third-party/popper.js +5 -0
  35. package/docs/sidechat.js/2.0.0-alpha.0/scripts/third-party/tippy.js +1 -0
  36. package/docs/sidechat.js/2.0.0-alpha.0/scripts/third-party/tocbot.js +672 -0
  37. package/docs/sidechat.js/2.0.0-alpha.0/scripts/third-party/tocbot.min.js +1 -0
  38. package/docs/sidechat.js/2.0.0-alpha.0/styles/clean-jsdoc-theme-base.css +975 -0
  39. package/docs/sidechat.js/2.0.0-alpha.0/styles/clean-jsdoc-theme-dark.css +407 -0
  40. package/docs/sidechat.js/2.0.0-alpha.0/styles/clean-jsdoc-theme-light.css +388 -0
  41. package/docs/sidechat.js/2.0.0-alpha.0/styles/clean-jsdoc-theme.min.css +1 -0
  42. package/docs/sidechat.js/2.0.0-alpha.0/types_SidechatTypes.js.html +82 -0
  43. package/jsdoc.json +7 -4
  44. package/package.json +3 -3
  45. package/src/classes/SidechatAPIClient.js +371 -0
  46. package/src/index.js +4 -0
  47. package/index.js +0 -362
  48. /package/{classes → src/classes}/SidechatAPIError.js +0 -0
  49. /package/{tests → src/tests}/basicTest.js +0 -0
  50. /package/{types → src/types}/SidechatTypes.js +0 -0
package/index.js DELETED
@@ -1,362 +0,0 @@
1
- import "./types/SidechatTypes.js";
2
- import SidechatAPIError from "./classes/SidechatAPIError.js";
3
- const defaultHeaders = {
4
- Accept: "application/json",
5
- "Content-Type": "application/json",
6
- };
7
-
8
- /**
9
- * Initiate the login process with a phone number. Should be followed up with verifySMSCode().
10
- * @param {Number} phoneNumber - US phone number (WITHOUT +1) to send verification code to
11
- */
12
- const loginViaSMS = async (phoneNumber) => {
13
- try {
14
- const res = await fetch(`https://api.sidechat.lol/v1/login_register`, {
15
- method: "POST",
16
- headers: defaultHeaders,
17
- body: JSON.stringify({
18
- phone_number: `+1${phoneNumber}`,
19
- version: 3,
20
- }),
21
- });
22
- const json = await res.json();
23
- return json;
24
- } catch (err) {
25
- console.error(error);
26
- throw new SidechatAPIError("Failed to request SMS verification.");
27
- }
28
- };
29
-
30
- /**
31
- * Verify the code sent via SMS with loginViaSMS().
32
- * @param {Number} phoneNumber - US phone number (WITHOUT +1) that verification code was sent to
33
- * @param {String} code - the verification code
34
- */
35
- const verifySMSCode = async (phoneNumber, code) => {
36
- try {
37
- const res = await fetch(`https://api.sidechat.lol/v1/verify_phone_number`, {
38
- method: "POST",
39
- headers: defaultHeaders,
40
- body: JSON.stringify({
41
- phone_number: `+1${phoneNumber}`,
42
- code: code.toUpperCase(),
43
- }),
44
- });
45
- const json = await res.json();
46
- return json;
47
- } catch (err) {
48
- console.error(err);
49
- throw new SidechatAPIError("Failed verify this code.");
50
- }
51
- };
52
-
53
- /**
54
- * Set the user's age
55
- * @param {Number} age - user's age in years
56
- * @param {String} registrationID - the registration ID generated by verifySMSCode()
57
- */
58
- const setAge = async (age, registrationID) => {
59
- if (age < 13) {
60
- throw new SidechatAPIError("You're too young to use Offsides.");
61
- }
62
- try {
63
- const res = await fetch(
64
- `https://api.sidechat.lol/v1/complete_registration`,
65
- {
66
- method: "POST",
67
- headers: defaultHeaders,
68
- body: JSON.stringify({
69
- age: Number(age),
70
- registration_id: registrationID,
71
- }),
72
- }
73
- );
74
- const json = await res.json();
75
- return json;
76
- } catch (err) {
77
- console.error(err);
78
- throw new SidechatAPIError("Failed verify this code.");
79
- }
80
- };
81
-
82
- /**
83
- * Initiate the email setup process. Should be followed up with checkEmailVerification().
84
- * @param {String} email - school email address to send verification code to
85
- * @param {String} token - user bearer token
86
- */
87
- const registerEmail = async (email, token) => {
88
- try {
89
- const res = await fetch(
90
- `https://api.sidechat.lol/v2/users/register_email`,
91
- {
92
- method: "POST",
93
- headers: {
94
- ...defaultHeaders,
95
- Authorization: `Bearer ${token}`,
96
- },
97
- body: JSON.stringify({
98
- email: email,
99
- }),
100
- }
101
- );
102
- const json = await res.json();
103
- if (json.message) {
104
- throw new SidechatAPIError(json.message);
105
- }
106
- return json;
107
- } catch (err) {
108
- console.error(error);
109
- throw new SidechatAPIError("Failed to request email verification.");
110
- }
111
- };
112
-
113
- /**
114
- * Check is the user's email is verified.
115
- * @param {String} token - user bearer token
116
- */
117
- const checkEmailVerification = async (token) => {
118
- try {
119
- const res = await fetch(
120
- `https://api.sidechat.lol/v1/users/check_email_verified`,
121
- {
122
- method: "GET",
123
- headers: {
124
- ...defaultHeaders,
125
- Authorization: `Bearer ${token}`,
126
- },
127
- }
128
- );
129
- const json = await res.json();
130
- if (json.verified_email_updates_response) {
131
- return json.verified_email_updates_response;
132
- } else {
133
- throw new SidechatAPIError(json?.message || "Email is not verified.");
134
- }
135
- } catch (err) {
136
- console.error(error);
137
- throw new SidechatAPIError("Email is not verified.");
138
- }
139
- };
140
-
141
- /**
142
- * Set the device ID of the current user
143
- * @param {String} deviceId - the device ID to set
144
- * @param {String} token - the user bearer token
145
- */
146
- const setDeviceID = async (deviceID, token) => {
147
- try {
148
- const res = await fetch(
149
- `https://api.sidechat.lol/v1/register_device_token`,
150
- {
151
- method: "POST",
152
- headers: {
153
- ...defaultHeaders,
154
- Authorization: `Bearer ${token}`,
155
- },
156
- body: JSON.stringify({
157
- build_type: "release",
158
- bundle_id: "com.flowerave.sidechat",
159
- device_token: deviceID,
160
- }),
161
- }
162
- );
163
- const json = await res.json();
164
- await AsyncStorage.setItem("deviceID", deviceID);
165
- return json;
166
- } catch (err) {
167
- console.error(err);
168
- throw new SidechatAPIError("Failed verify this code.");
169
- }
170
- };
171
-
172
- /**
173
- * Get updated status for user and group
174
- * @param {String} token - user bearer token
175
- * @param {String} [groupID] - ID of a specific group to retrieve info from
176
- * @returns
177
- */
178
- const getUserAndGroup = async (token, groupID = "") => {
179
- try {
180
- const res = await fetch(
181
- `https://api.sidechat.lol/v1/updates?group_id=${groupID}`,
182
- {
183
- method: "GET",
184
- headers: {
185
- ...defaultHeaders,
186
- Authorization: `Bearer ${token}`,
187
- },
188
- }
189
- );
190
- const json = await res.json();
191
- return json;
192
- } catch (err) {
193
- console.error(err);
194
- throw new SidechatAPIError(`Failed to get posts from group.`);
195
- }
196
- };
197
-
198
- /**
199
- * Fetches posts from the specified category in a group
200
- * @param {String} groupID - group ID
201
- * @param {String} token - user bearer token
202
- * @param {"hot"|"recent"|"top"} category - category to filter posts
203
- * @param {SidechatCursorString} [cursor] - cursor string
204
- * @returns {{posts: SidechatPostOrComment[], cursor: SidechatCursorString}} List of posts and cursor
205
- */
206
- const getGroupPosts = async (groupID, token, category = "hot", cursor) => {
207
- try {
208
- const res = await fetch(
209
- `https://api.sidechat.lol/v1/posts?group_id=${groupID}&type=${category}${
210
- cursor ? "&cursor=" + cursor : ""
211
- }`,
212
- {
213
- method: "GET",
214
- headers: {
215
- ...defaultHeaders,
216
- Authorization: `Bearer ${token}`,
217
- },
218
- }
219
- );
220
- const json = await res.json();
221
- return json;
222
- } catch (err) {
223
- console.error(err);
224
- throw new SidechatAPIError(`Failed to get posts from group.`);
225
- }
226
- };
227
-
228
- /**
229
- * Upvote or downvote, or unvote a post
230
- * @param {String} postID - post ID to vote on
231
- * @param {String} token - user bearer token
232
- * @param {SidechatVoteString} action - whether to upvote, downvote, or reset vote
233
- * @returns
234
- */
235
- const setVote = async (postID, token, action) => {
236
- try {
237
- const res = await fetch(`https://api.sidechat.lol/v1/posts/set_vote`, {
238
- method: "POST",
239
- headers: {
240
- ...defaultHeaders,
241
- Authorization: `Bearer ${token}`,
242
- },
243
- body: JSON.stringify({
244
- post_id: postID,
245
- vote_status: action,
246
- }),
247
- });
248
- const json = await res.json();
249
- return json;
250
- } catch (err) {
251
- console.error(err);
252
- throw new SidechatAPIError(`Failed to change the vote on post.`);
253
- }
254
- };
255
-
256
- /**
257
- * Get all the commments on a post
258
- * @param {String} postID - post ID to get comments for
259
- * @param {String} token - user bearer token
260
- * @returns {SidechatPostOrComment[]} list of comments
261
- */
262
- const getPostComments = async (postID, token) => {
263
- try {
264
- const res = await fetch(
265
- `https://api.sidechat.lol/v1/posts/comments/?post_id=${postID}`,
266
- {
267
- method: "GET",
268
- headers: {
269
- ...defaultHeaders,
270
- Authorization: `Bearer ${token}`,
271
- },
272
- }
273
- );
274
- const json = await res.json();
275
- // Function to preprocess the comments and organize them into a nested structure
276
- function preprocessComments(apiComments) {
277
- // Map to store comments by their IDs for efficient lookup
278
- const commentMap = new Map();
279
- // List to store top-level comments
280
- const topLevelComments = [];
281
-
282
- // Iterate through the API comments
283
- apiComments.forEach((comment) => {
284
- // Store the comment in the map with its ID as the key
285
- commentMap.set(comment.id, comment);
286
- // Get the parent comment using the reply_post_id
287
- const parentComment = commentMap.get(comment.reply_post_id);
288
- // Check if the comment is a top-level comment
289
- if (
290
- !parentComment ||
291
- comment.reply_post_id === comment.parent_post_id
292
- ) {
293
- // If it's a top-level comment, push it to the topLevelComments array
294
- topLevelComments.push(comment);
295
- } else {
296
- // If it's a reply, add it to the parent comment's replies array
297
- if (!parentComment.replies) parentComment.replies = [];
298
- parentComment.replies.push(comment);
299
- }
300
- });
301
-
302
- // Flatten the nested structure and return a single list of comments
303
- return flattenComments(topLevelComments);
304
- }
305
-
306
- // Function to flatten nested comments into a single list
307
- function flattenComments(comments) {
308
- // Use reduce to flatten the nested comments array into a single list
309
- return comments.reduce((flatComments, comment) => {
310
- // Push the current comment to the flatComments array
311
- flatComments.push(comment);
312
- // If the current comment has replies, recursively flatten them and push to the flatComments array
313
- if (comment.replies)
314
- flatComments.push(...flattenComments(comment.replies));
315
- // Return the flatComments array
316
- return flatComments;
317
- }, []);
318
- }
319
-
320
- const sortedComments = preprocessComments(json.posts);
321
- return sortedComments;
322
- } catch (err) {
323
- console.error(err);
324
- throw new SidechatAPIError(`Failed to get comments on post.`);
325
- }
326
- };
327
-
328
- /**
329
- * Gets groups to be displayed on the "Explore Groups" page
330
- * @param {String} token - user bearer token
331
- * @returns {SidechatGroup}
332
- */
333
- const getAvailableGroups = async (token) => {
334
- try {
335
- const res = await fetch(`https://api.sidechat.lol/v1/groups/explore`, {
336
- method: "GET",
337
- headers: {
338
- ...defaultHeaders,
339
- Authorization: `Bearer ${token}`,
340
- },
341
- });
342
- const json = await res.json();
343
- return json.groups;
344
- } catch (err) {
345
- console.error(err);
346
- throw new SidechatAPIError(`Failed to get groups from explore.`);
347
- }
348
- };
349
-
350
- export {
351
- loginViaSMS,
352
- verifySMSCode,
353
- setAge,
354
- setDeviceID,
355
- registerEmail,
356
- checkEmailVerification,
357
- getUserAndGroup,
358
- getGroupPosts,
359
- setVote,
360
- getPostComments,
361
- getAvailableGroups,
362
- };
File without changes
File without changes
File without changes