sidechat.js 2.0.5 → 2.1.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 (75) hide show
  1. package/dist/classes/SidechatAPIClient.d.ts +45 -3
  2. package/dist/classes/SidechatAPIClient.d.ts.map +1 -1
  3. package/dist/index.cjs +106 -3
  4. package/dist/index.mjs +106 -3
  5. package/dist/types/SidechatTypes.d.ts +96 -7
  6. package/dist/types/SidechatTypes.d.ts.map +1 -1
  7. package/docs/sidechat.js/2.0.6/SidechatAPIClient.html +3 -0
  8. package/docs/sidechat.js/2.0.6/SidechatAPIError.html +3 -0
  9. package/docs/sidechat.js/2.0.6/classes_SidechatAPIClient.js.html +462 -0
  10. package/docs/sidechat.js/2.0.6/classes_SidechatAPIError.js.html +16 -0
  11. package/docs/sidechat.js/2.0.6/data/search.json +1 -0
  12. package/docs/sidechat.js/2.0.6/fonts/Inconsolata-Regular.ttf +0 -0
  13. package/docs/sidechat.js/2.0.6/fonts/OpenSans-Regular.ttf +0 -0
  14. package/docs/sidechat.js/2.0.6/fonts/WorkSans-Bold.ttf +0 -0
  15. package/docs/sidechat.js/2.0.6/global.html +3 -0
  16. package/docs/sidechat.js/2.0.6/index.html +4 -0
  17. package/docs/sidechat.js/2.0.6/scripts/core.js +702 -0
  18. package/docs/sidechat.js/2.0.6/scripts/core.min.js +23 -0
  19. package/docs/sidechat.js/2.0.6/scripts/resize.js +90 -0
  20. package/docs/sidechat.js/2.0.6/scripts/search.js +265 -0
  21. package/docs/sidechat.js/2.0.6/scripts/search.min.js +6 -0
  22. package/docs/sidechat.js/2.0.6/scripts/third-party/Apache-License-2.0.txt +202 -0
  23. package/docs/sidechat.js/2.0.6/scripts/third-party/fuse.js +9 -0
  24. package/docs/sidechat.js/2.0.6/scripts/third-party/hljs-line-num-original.js +369 -0
  25. package/docs/sidechat.js/2.0.6/scripts/third-party/hljs-line-num.js +1 -0
  26. package/docs/sidechat.js/2.0.6/scripts/third-party/hljs-original.js +5171 -0
  27. package/docs/sidechat.js/2.0.6/scripts/third-party/hljs.js +1 -0
  28. package/docs/sidechat.js/2.0.6/scripts/third-party/popper.js +5 -0
  29. package/docs/sidechat.js/2.0.6/scripts/third-party/tippy.js +1 -0
  30. package/docs/sidechat.js/2.0.6/scripts/third-party/tocbot.js +672 -0
  31. package/docs/sidechat.js/2.0.6/scripts/third-party/tocbot.min.js +1 -0
  32. package/docs/sidechat.js/2.0.6/styles/clean-jsdoc-theme-base.css +975 -0
  33. package/docs/sidechat.js/2.0.6/styles/clean-jsdoc-theme-dark.css +407 -0
  34. package/docs/sidechat.js/2.0.6/styles/clean-jsdoc-theme-light.css +388 -0
  35. package/docs/sidechat.js/2.0.6/styles/clean-jsdoc-theme.min.css +1 -0
  36. package/docs/sidechat.js/2.0.6/tutorial-Authentication.html +13 -0
  37. package/docs/sidechat.js/2.0.6/tutorial-Email Registration.html +6 -0
  38. package/docs/sidechat.js/2.0.6/types_SidechatTypes.js.html +114 -0
  39. package/docs/sidechat.js/2.1.0/SidechatAPIClient.html +3 -0
  40. package/docs/sidechat.js/2.1.0/SidechatAPIError.html +3 -0
  41. package/docs/sidechat.js/2.1.0/classes_SidechatAPIClient.js.html +528 -0
  42. package/docs/sidechat.js/2.1.0/classes_SidechatAPIError.js.html +16 -0
  43. package/docs/sidechat.js/2.1.0/data/search.json +1 -0
  44. package/docs/sidechat.js/2.1.0/fonts/Inconsolata-Regular.ttf +0 -0
  45. package/docs/sidechat.js/2.1.0/fonts/OpenSans-Regular.ttf +0 -0
  46. package/docs/sidechat.js/2.1.0/fonts/WorkSans-Bold.ttf +0 -0
  47. package/docs/sidechat.js/2.1.0/global.html +3 -0
  48. package/docs/sidechat.js/2.1.0/index.html +4 -0
  49. package/docs/sidechat.js/2.1.0/scripts/core.js +702 -0
  50. package/docs/sidechat.js/2.1.0/scripts/core.min.js +23 -0
  51. package/docs/sidechat.js/2.1.0/scripts/resize.js +90 -0
  52. package/docs/sidechat.js/2.1.0/scripts/search.js +265 -0
  53. package/docs/sidechat.js/2.1.0/scripts/search.min.js +6 -0
  54. package/docs/sidechat.js/2.1.0/scripts/third-party/Apache-License-2.0.txt +202 -0
  55. package/docs/sidechat.js/2.1.0/scripts/third-party/fuse.js +9 -0
  56. package/docs/sidechat.js/2.1.0/scripts/third-party/hljs-line-num-original.js +369 -0
  57. package/docs/sidechat.js/2.1.0/scripts/third-party/hljs-line-num.js +1 -0
  58. package/docs/sidechat.js/2.1.0/scripts/third-party/hljs-original.js +5171 -0
  59. package/docs/sidechat.js/2.1.0/scripts/third-party/hljs.js +1 -0
  60. package/docs/sidechat.js/2.1.0/scripts/third-party/popper.js +5 -0
  61. package/docs/sidechat.js/2.1.0/scripts/third-party/tippy.js +1 -0
  62. package/docs/sidechat.js/2.1.0/scripts/third-party/tocbot.js +672 -0
  63. package/docs/sidechat.js/2.1.0/scripts/third-party/tocbot.min.js +1 -0
  64. package/docs/sidechat.js/2.1.0/styles/clean-jsdoc-theme-base.css +975 -0
  65. package/docs/sidechat.js/2.1.0/styles/clean-jsdoc-theme-dark.css +407 -0
  66. package/docs/sidechat.js/2.1.0/styles/clean-jsdoc-theme-light.css +388 -0
  67. package/docs/sidechat.js/2.1.0/styles/clean-jsdoc-theme.min.css +1 -0
  68. package/docs/sidechat.js/2.1.0/tutorial-Authentication.html +13 -0
  69. package/docs/sidechat.js/2.1.0/tutorial-Email Registration.html +6 -0
  70. package/docs/sidechat.js/2.1.0/types_SidechatTypes.js.html +134 -0
  71. package/package.json +54 -53
  72. package/src/classes/SidechatAPIClient.js +106 -3
  73. package/src/index.js +1 -1
  74. package/src/tests/basicTest.js +6 -4
  75. package/src/types/SidechatTypes.js +44 -6
@@ -0,0 +1,134 @@
1
+ <!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Source: types/SidechatTypes.js</title><!--[if lt IE 9]>
2
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
3
+ <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(baseURL=(baseURL="https://micahlindley.com/sidechat.js/").replace(/https?:\/\//i,"")).substr(baseURL.indexOf("/"))</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">Home</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-tutorials"><div>Tutorials</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="tutorial-Authentication.html">Authentication</a></div><div class="sidebar-section-children"><a href="tutorial-Email Registration.html">Email Registration</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="SidechatAPIClient.html">SidechatAPIClient</a></div><div class="sidebar-section-children"><a href="SidechatAPIError.html">SidechatAPIError</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#SidechatAssetMetadata">SidechatAssetMetadata</a></div><div class="sidebar-section-children"><a href="global.html#SidechatAuthToken">SidechatAuthToken</a></div><div class="sidebar-section-children"><a href="global.html#SidechatCurrentUser">SidechatCurrentUser</a></div><div class="sidebar-section-children"><a href="global.html#SidechatCursorString">SidechatCursorString</a></div><div class="sidebar-section-children"><a href="global.html#SidechatGroup">SidechatGroup</a></div><div class="sidebar-section-children"><a href="global.html#SidechatIdentity">SidechatIdentity</a></div><div class="sidebar-section-children"><a href="global.html#SidechatLibraryAsset">SidechatLibraryAsset</a></div><div class="sidebar-section-children"><a href="global.html#SidechatMembership">SidechatMembership</a></div><div class="sidebar-section-children"><a href="global.html#SidechatPostOrComment">SidechatPostOrComment</a></div><div class="sidebar-section-children"><a href="global.html#SidechatPostsAndCursor">SidechatPostsAndCursor</a></div><div class="sidebar-section-children"><a href="global.html#SidechatPrivateAssetURL">SidechatPrivateAssetURL</a></div><div class="sidebar-section-children"><a href="global.html#SidechatSimpleAsset">SidechatSimpleAsset</a></div><div class="sidebar-section-children"><a href="global.html#SidechatVoteString">SidechatVoteString</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="navbar-item"><a id="" href="https://github.com/micahlt/offsides#README.md" target="_blank">Offsides (Sidechat for Android)</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section id="source-page" class="source-page"><header><h1 id="title" class="has-anchor">types_SidechatTypes.js</h1></header><article><pre class="prettyprint source lang-js"><code>/**
4
+ * A user-created post or comment, depending on the "type" prop
5
+ * @typedef {Object} SidechatPostOrComment
6
+ * @prop {"post"|"comment"} type - whether this object represents a post or a comment on a post
7
+ * @prop {String} id - alphanumeric ID of post or comment
8
+ * @prop {Boolean} authored_by_user - undocumented
9
+ * @prop {String} alias - post creator's name in-app
10
+ * @prop {String} group_id - alphanumeric ID of group
11
+ * @prop {SidechatGroup} group - group in which post or comment was created
12
+ * @prop {String} text - text content of post or comment
13
+ * @prop {String} created_at - date string of post or comment creation time
14
+ * @prop {Number} vote_total - sum of upvotes and downvotes
15
+ * @prop {SidechatVoteString} vote_status - current user's vote on post or comment
16
+ * @prop {SidechatSimpleAsset[]} assets - array of simple assets attached to post or comment
17
+ * @prop {Array} attachments - undocumented
18
+ * @prop {Boolean} dms_disabled - whether or not you can send a DM to creator of post
19
+ * @prop {Array} tags - undocumented
20
+ * @prop {SidechatIdentity} identity - creator's identity information
21
+ * @prop {Boolean} pinned - undocumented
22
+ * @prop {Boolean} is_saved - undocumented
23
+ * @prop {"following"|"not_following"} follow_status - undocumented
24
+ * @prop {"group"} [destination] - undocumented
25
+ * @prop {Number} [comment_count] - number of comments on post (only if type=post)
26
+ * @prop {Boolean} [comments_disabled] - whether or not you can comment on post (only if type=post)
27
+ * @prop {String} [parent_post_id] - alphanumeric ID of parent post (only if type=comment)
28
+ * @prop {String} [reply_post_id] - alphanumeric ID of comment being replied to, falls back to parent_post_id (only if type=comment)
29
+ * @prop {String} [context] - text content of comment being replied to, falls back to text (only if type=comment)
30
+ */
31
+
32
+ /**
33
+ * A group object, containing metadata about a group as well as its join conditions and states. Some properties vary based on the endpoint the object came from.
34
+ * @typedef {Object} SidechatGroup
35
+ * @prop {String} id - alphanumeric ID of group
36
+ * @prop {String} name - human-readable name of group
37
+ * @prop {String} analytics_name - name to file group under
38
+ * @prop {"non_member"|"member"} membership_type - whether or not current user is a member of group
39
+ * @prop {String} color - group's theme color as hex code (e.g., #FFFFFF)
40
+ * @prop {"open"|"closed"|"email_domain"} group_join_type - basis on which group accepts new members
41
+ * @prop {"private"|"public_to_all"|"public_to_schools"} group_visibility - group's visibility setting
42
+ * @prop {"show"|"hide"} asset_library_visibility - whether or not group's asset library is visible
43
+ * @prop {Array} [roles] - undocumented
44
+ * @prop {String} [description] - description of group
45
+ * @prop {SidechatPrivateAssetURL} [icon_url] - image URL for group icon
46
+ * @prop {Number} [member_count] - number of users in group
47
+ * @prop {Boolean} [should_show_leaderboard] - undocumented
48
+ */
49
+
50
+ /**
51
+ * An asset object, containing information about an image within a post or comment
52
+ * @typedef {Object} SidechatSimpleAsset
53
+ * @prop {String} id - alphanumeric ID of asset
54
+ * @prop {"image"} type - undocumented
55
+ * @prop {"jpeg"|"png"|"gif"} content_type - file type of asset
56
+ * @prop {Number} width - width of asset
57
+ * @prop {Number} height - height of asset
58
+ * @prop {SidechatPrivateAssetURL} url - URL string of asset's location
59
+ */
60
+
61
+ /**
62
+ * An asset object, containing information about an image from the asset library
63
+ * @typedef {Object} SidechatLibraryAsset
64
+ * @prop {String} id - alphanumeric ID of asset
65
+ * @prop {String} created_at - date string of asset creation time
66
+ * @prop {SidechatAssetMetadata} metadata - metadata associated with asset
67
+ * @prop {SidechatPrivateAssetURL} url - URL string of asset's location
68
+ */
69
+
70
+ /**
71
+ * An asset object, containing information about an image from the asset library
72
+ * @typedef {Object} SidechatAssetMetadata
73
+ * @prop {Number} width - width of asset
74
+ * @prop {Number} height - height of asset
75
+ * @prop {"image"} type - undocumented
76
+ * @prop {"jpeg"|"png"|"gif"} content_type - file type of asset
77
+ */
78
+
79
+ /**
80
+ * A user's anonymous identity information
81
+ * @typedef {Object} SidechatIdentity
82
+ * @prop {String} name - representation of user's name (varies across app)
83
+ * @prop {Boolean} posted_with_username - undocumented
84
+ */
85
+
86
+ /**
87
+ * The current user's information
88
+ * @typedef {Object} SidechatCurrentUser
89
+ * @prop {String} id - alphanumeric ID of current user
90
+ * @prop {String} hashedVerifiedEmail - verified email of current user in an unreadable hashed form
91
+ * @prop {Boolean} isGlobalModerator - whether or not user is a moderator
92
+ * @prop {Boolean} isGlobalAdmin - whether or not user is an admin
93
+ * @prop {SidechatMembership[]} memberships
94
+ * @prop {Array} roles - undocumented
95
+ * @prop {String} emailDomain - domain of verified email address on account
96
+ * @prop {String} wildcardEmailDomain - domain of verified email address on account, preceeded by *. to support subdomains
97
+ */
98
+
99
+ /**
100
+ * Representation of a group membership
101
+ * @typedef {Object} SidechatMembership
102
+ * @prop {String} groupId - alphanumeric ID of group
103
+ * @prop {String} type - role of current user in group
104
+ */
105
+
106
+ /**
107
+ * An asset URL that can only be accessed by making a request with a user's bearer token attached in the Authorization header
108
+ * @typedef {String} SidechatPrivateAssetURL
109
+ */
110
+
111
+ /**
112
+ * A cursor for paginating through post lists
113
+ * @typedef {String} SidechatCursorString
114
+ */
115
+
116
+ /**
117
+ * A vote on a comment or post
118
+ * @typedef {"upvote"|"downvote"|"none"} SidechatVoteString
119
+ */
120
+
121
+ /**
122
+ * A user's bearer authentication token needed for most requests
123
+ * @typedef {String} SidechatAuthToken
124
+ */
125
+
126
+ /**
127
+ * A list of posts and the associated cursor
128
+ * @typedef {Object} SidechatPostsAndCursor
129
+ * @prop {SidechatPostOrComment[]} posts
130
+ * @prop {SidechatCursorString} cursor
131
+ */
132
+
133
+ export default {};
134
+ </code></pre></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><a href="/" class="sidebar-title sidebar-title-anchor">Home</a><div class="mobile-nav-links"><div class="navbar-item"><a id="" href="https://github.com/micahlt/offsides#README.md" target="_blank">Offsides (Sidechat for Android)</a></div></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-tutorials"><div>Tutorials</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="tutorial-Authentication.html">Authentication</a></div><div class="sidebar-section-children"><a href="tutorial-Email Registration.html">Email Registration</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="SidechatAPIClient.html">SidechatAPIClient</a></div><div class="sidebar-section-children"><a href="SidechatAPIError.html">SidechatAPIError</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#SidechatAssetMetadata">SidechatAssetMetadata</a></div><div class="sidebar-section-children"><a href="global.html#SidechatAuthToken">SidechatAuthToken</a></div><div class="sidebar-section-children"><a href="global.html#SidechatCurrentUser">SidechatCurrentUser</a></div><div class="sidebar-section-children"><a href="global.html#SidechatCursorString">SidechatCursorString</a></div><div class="sidebar-section-children"><a href="global.html#SidechatGroup">SidechatGroup</a></div><div class="sidebar-section-children"><a href="global.html#SidechatIdentity">SidechatIdentity</a></div><div class="sidebar-section-children"><a href="global.html#SidechatLibraryAsset">SidechatLibraryAsset</a></div><div class="sidebar-section-children"><a href="global.html#SidechatMembership">SidechatMembership</a></div><div class="sidebar-section-children"><a href="global.html#SidechatPostOrComment">SidechatPostOrComment</a></div><div class="sidebar-section-children"><a href="global.html#SidechatPostsAndCursor">SidechatPostsAndCursor</a></div><div class="sidebar-section-children"><a href="global.html#SidechatPrivateAssetURL">SidechatPrivateAssetURL</a></div><div class="sidebar-section-children"><a href="global.html#SidechatSimpleAsset">SidechatSimpleAsset</a></div><div class="sidebar-section-children"><a href="global.html#SidechatVoteString">SidechatVoteString</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
package/package.json CHANGED
@@ -1,53 +1,54 @@
1
- {
2
- "name": "sidechat.js",
3
- "version": "2.0.5",
4
- "description": "A reverse-engineered API wrapper for Sidechat",
5
- "type": "module",
6
- "source": "./src/index.js",
7
- "main": "./dist/index.cjs",
8
- "module": "./dist/index.mjs",
9
- "types": "./dist/index.d.ts",
10
- "exports": {
11
- ".": {
12
- "import": {
13
- "types": "./dist/index.d.mts",
14
- "default": "./dist/index.mjs"
15
- },
16
- "require": {
17
- "types": "./dist/index.d.ts",
18
- "default": "./dist/index.cjs"
19
- }
20
- },
21
- "./src/types": {
22
- "types": "./dist/types/SidechatTypes.d.ts",
23
- "default": "./src/types/SidechatTypes.js"
24
- }
25
- },
26
- "scripts": {
27
- "build": "rollup -c",
28
- "dev": "rollup -c --watch",
29
- "docs": "jsdoc --configure jsdoc.json --verbose",
30
- "prepublish": "tsc",
31
- "typegen": "tsc"
32
- },
33
- "repository": {
34
- "type": "git",
35
- "url": "git+https://github.com/micahlt/sidechat.js.git"
36
- },
37
- "author": "Micah Lindley",
38
- "license": "MIT",
39
- "bugs": {
40
- "url": "https://github.com/micahlt/sidechat.js/issues"
41
- },
42
- "homepage": "https://github.com/micahlt/sidechat.js#readme",
43
- "engines": {
44
- "node": ">=18.0.0"
45
- },
46
- "devDependencies": {
47
- "clean-jsdoc-theme": "^4.2.17",
48
- "prompt-sync": "^4.2.0",
49
- "rollup": "^2.79.1",
50
- "rollup-plugin-copy": "^3.5.0",
51
- "typescript": "^5.4.2"
52
- }
53
- }
1
+ {
2
+ "name": "sidechat.js",
3
+ "version": "2.1.0",
4
+ "description": "A reverse-engineered API wrapper for Sidechat",
5
+ "type": "module",
6
+ "source": "./src/index.js",
7
+ "main": "./dist/index.cjs",
8
+ "module": "./dist/index.mjs",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": {
13
+ "types": "./dist/index.d.mts",
14
+ "default": "./dist/index.mjs"
15
+ },
16
+ "require": {
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.cjs"
19
+ }
20
+ },
21
+ "./src/types": {
22
+ "types": "./dist/types/SidechatTypes.d.ts",
23
+ "default": "./src/types/SidechatTypes.js"
24
+ }
25
+ },
26
+ "scripts": {
27
+ "build": "rollup -c",
28
+ "dev": "rollup -c --watch",
29
+ "docs": "jsdoc --configure jsdoc.json --verbose",
30
+ "prepublish": "tsc",
31
+ "typegen": "tsc"
32
+ },
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/micahlt/sidechat.js.git"
36
+ },
37
+ "author": "Micah Lindley",
38
+ "license": "MIT",
39
+ "bugs": {
40
+ "url": "https://github.com/micahlt/sidechat.js/issues"
41
+ },
42
+ "homepage": "https://github.com/micahlt/sidechat.js#readme",
43
+ "engines": {
44
+ "node": ">=18.0.0"
45
+ },
46
+ "devDependencies": {
47
+ "clean-jsdoc-theme": "^4.2.17",
48
+ "dotenv": "^16.4.5",
49
+ "prompt-sync": "^4.2.0",
50
+ "rollup": "^2.79.1",
51
+ "rollup-plugin-copy": "^3.5.0",
52
+ "typescript": "^5.4.2"
53
+ }
54
+ }
@@ -16,6 +16,7 @@ class SidechatAPIClient {
16
16
  * Default headers for every API request
17
17
  * @type {Object}
18
18
  * @static
19
+ * @constant
19
20
  */
20
21
  defaultHeaders = {
21
22
  Accept: "application/json",
@@ -44,6 +45,7 @@ class SidechatAPIClient {
44
45
  /**
45
46
  * Initiate the login process with a phone number. Should be followed up with verifySMSCode().
46
47
  * @method
48
+ * @since 1.0.0
47
49
  * @param {Number} phoneNumber - US phone number (WITHOUT +1) to send verification code to
48
50
  */
49
51
  loginViaSMS = async (phoneNumber) => {
@@ -65,8 +67,9 @@ class SidechatAPIClient {
65
67
  };
66
68
 
67
69
  /**
68
- * Verify the code sent via SMS with loginViaSMS().
70
+ * Verify the code sent via SMS with loginViaSMS(). If this function succeeds, the user will be authenticated for future requests.
69
71
  * @method
72
+ * @since 1.0.0
70
73
  * @param {Number} phoneNumber - US phone number (WITHOUT +1) that verification code was sent to
71
74
  * @param {String} code - the verification code
72
75
  */
@@ -95,8 +98,9 @@ class SidechatAPIClient {
95
98
  };
96
99
 
97
100
  /**
98
- * Set the user's age
101
+ * Set the user's age. If this function succeeds, the user will be authenticated for future requests.
99
102
  * @method
103
+ * @since 1.0.0
100
104
  * @param {Number} age - user's age in years
101
105
  * @param {String} registrationID - the registration ID generated by verifySMSCode()
102
106
  */
@@ -130,6 +134,7 @@ class SidechatAPIClient {
130
134
  /**
131
135
  * Initiate the email setup process. Should be followed up with checkEmailVerification().
132
136
  * @method
137
+ * @since 1.0.0
133
138
  * @param {String} email - school email address to send verification code to
134
139
  * @tutorial Email Registration
135
140
  */
@@ -165,6 +170,7 @@ class SidechatAPIClient {
165
170
  /**
166
171
  * Check is the user's email is verified.
167
172
  * @method
173
+ * @since 1.0.0
168
174
  */
169
175
  checkEmailVerification = async () => {
170
176
  if (!this.userToken) {
@@ -196,6 +202,7 @@ class SidechatAPIClient {
196
202
  /**
197
203
  * Set the device ID of the current user
198
204
  * @method
205
+ * @since 1.0.0
199
206
  * @param {String} deviceId - the device ID to set
200
207
  */
201
208
  setDeviceID = async (deviceID) => {
@@ -230,9 +237,22 @@ class SidechatAPIClient {
230
237
  /**
231
238
  * Get updated status for user and group
232
239
  * @method
233
- * @param {String} [groupID] - ID of a specific group to retrieve info from
240
+ * @since 1.0.0
241
+ * @deprecated since 2.1.0, will be removed by 3.0.0. Please use `getUpdates` instead!
242
+ * @param {String} [groupID] - ID of a specific group to retrieve info from. Falls back to user's primary group.
234
243
  */
235
244
  getUserAndGroup = async (groupID = "") => {
245
+ const json = await this.getUpdates(groupID);
246
+ return json;
247
+ };
248
+
249
+ /**
250
+ * Get updated status for user and group
251
+ * @method
252
+ * @since 2.1.0
253
+ * @param {String} [groupID] - ID of a specific group to retrieve info from. Falls back to user's primary group.
254
+ */
255
+ getUpdates = async (groupID = "") => {
236
256
  if (!this.userToken) {
237
257
  throw new SidechatAPIError("User is not authenticated.");
238
258
  }
@@ -258,6 +278,7 @@ class SidechatAPIClient {
258
278
  /**
259
279
  * Fetches posts from the specified category in a group
260
280
  * @method
281
+ * @since 1.0.0
261
282
  * @param {String} groupID - group ID
262
283
  * @param {"hot"|"recent"|"top"} category - category to filter posts
263
284
  * @param {SidechatCursorString} [cursor] - cursor string
@@ -291,6 +312,7 @@ class SidechatAPIClient {
291
312
  /**
292
313
  * Upvote or downvote, or unvote a post
293
314
  * @method
315
+ * @since 2.0.0-alpha.0
294
316
  * @param {String} postID - post ID to vote on
295
317
  * @param {SidechatVoteString} action - whether to upvote, downvote, or reset vote
296
318
  */
@@ -321,6 +343,7 @@ class SidechatAPIClient {
321
343
  /**
322
344
  * Get all the commments on a post
323
345
  * @method
346
+ * @since 2.0.0-alpha.0
324
347
  * @param {String} postID - post ID to get comments for
325
348
  * @returns {SidechatPostOrComment[]} list of comments
326
349
  */
@@ -396,6 +419,7 @@ class SidechatAPIClient {
396
419
  /**
397
420
  * Gets groups to be displayed on the "Explore Groups" page
398
421
  * @method
422
+ * @since 2.0.0-alpha.0
399
423
  * @returns {SidechatGroup[]}
400
424
  */
401
425
  getAvailableGroups = async () => {
@@ -417,6 +441,85 @@ class SidechatAPIClient {
417
441
  throw new SidechatAPIError(`Failed to get groups from explore.`);
418
442
  }
419
443
  };
444
+
445
+ /**
446
+ * Retrieves the entire accessible asset library. Be warned that as of the time of this documentation, it's a 1.5MB JSON download and this request is very expensive.
447
+ * @method
448
+ * @since 2.0.6
449
+ * @returns {SidechatLibraryAsset[]}
450
+ */
451
+ getAssetLibrary = async () => {
452
+ if (!this.userToken) {
453
+ throw new SidechatAPIError("User is not authenticated.");
454
+ }
455
+ try {
456
+ const res = await fetch(`https://api.sidechat.lol/v1/assets/library`, {
457
+ method: "GET",
458
+ headers: {
459
+ ...this.defaultHeaders,
460
+ Authorization: `Bearer ${this.userToken}`,
461
+ },
462
+ });
463
+ const json = await res.json();
464
+ return await json.items;
465
+ } catch (err) {
466
+ console.error(err);
467
+ throw new SidechatAPIError(`Failed to get asset library.`);
468
+ }
469
+ };
470
+
471
+ /**
472
+ * Gets the current authenticated user and a list of the groups of which they are members.
473
+ * @method
474
+ * @since 2.1.0
475
+ * @returns {SidechatCurrentUser}
476
+ */
477
+ getCurrentUser = async () => {
478
+ if (!this.userToken) {
479
+ throw new SidechatAPIError("User is not authenticated.");
480
+ }
481
+ try {
482
+ const res = await fetch(`https://api.sidechat.lol/v1/users/me`, {
483
+ method: "GET",
484
+ headers: {
485
+ ...this.defaultHeaders,
486
+ Authorization: `Bearer ${this.userToken}`,
487
+ },
488
+ });
489
+ const json = await res.json();
490
+ return await json;
491
+ } catch (err) {
492
+ console.error(err);
493
+ throw new SidechatAPIError(`Failed to get asset library.`);
494
+ }
495
+ };
496
+
497
+ /**
498
+ * Gets the metadata of a group from its ID
499
+ * @method
500
+ * @since 2.1.0
501
+ * @param {String} [groupID] - alphanumeric ID of a group to get. Falls back to user's primary group.
502
+ * @returns {SidechatGroup}
503
+ */
504
+ getGroupMetadata = async (groupID = "") => {
505
+ if (!this.userToken) {
506
+ throw new SidechatAPIError("User is not authenticated.");
507
+ }
508
+ try {
509
+ const res = await fetch(`https://api.sidechat.lol/v1/groups/${groupID}`, {
510
+ method: "GET",
511
+ headers: {
512
+ ...this.defaultHeaders,
513
+ Authorization: `Bearer ${this.userToken}`,
514
+ },
515
+ });
516
+ const json = await res.json();
517
+ return await json.group;
518
+ } catch (err) {
519
+ console.error(err);
520
+ throw new SidechatAPIError(`Failed to get asset library.`);
521
+ }
522
+ };
420
523
  }
421
524
 
422
525
  export default SidechatAPIClient;
package/src/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import "./types/SidechatTypes";
1
+ import "./types/SidechatTypes.js";
2
2
  import SidechatAPIClient from "./classes/SidechatAPIClient.js";
3
3
  import SidechatAPIError from "./classes/SidechatAPIError.js";
4
4
 
@@ -1,18 +1,20 @@
1
+ import { configDotenv } from "dotenv";
1
2
  import { SidechatAPIClient } from "../index.js";
2
3
  import PromptSync from "prompt-sync";
3
4
  const prompt = new PromptSync();
5
+ configDotenv({ path: ".env.local", debug: true });
4
6
 
5
7
  async function main() {
6
- const API = new SidechatAPIClient(
7
- "eyJhbGciOiJIUzI1NiJ9.ZTViNjFiMzktM2UwNi00NGU1LTg1M2YtMTg2MDNhOWQzOWM5.gOl2_HPyPzcyNpTXqSQEuJ3ZUmZi7Zq_vSBoRfbKA1A"
8
- );
9
- if (API.userToken) {
8
+ const API = new SidechatAPIClient(process.env.SIDECHAT_TOKEN);
9
+ if (!API.userToken) {
10
10
  const phoneNum = prompt("Phone number: ");
11
11
  await API.loginViaSMS(phoneNum);
12
12
  const code = prompt("Code: ");
13
13
  await API.verifySMSCode(phoneNum, code);
14
14
  console.log("User auth token:", API.userToken);
15
15
  } else {
16
+ const lib = await API.getAssetLibrary();
17
+ console.log(lib);
16
18
  }
17
19
  }
18
20
 
@@ -11,7 +11,7 @@
11
11
  * @prop {String} created_at - date string of post or comment creation time
12
12
  * @prop {Number} vote_total - sum of upvotes and downvotes
13
13
  * @prop {SidechatVoteString} vote_status - current user's vote on post or comment
14
- * @prop {SidechatAsset[]} assets - array of assets attached to post or comment
14
+ * @prop {SidechatSimpleAsset[]} assets - array of simple assets attached to post or comment
15
15
  * @prop {Array} attachments - undocumented
16
16
  * @prop {Boolean} dms_disabled - whether or not you can send a DM to creator of post
17
17
  * @prop {Array} tags - undocumented
@@ -28,7 +28,7 @@
28
28
  */
29
29
 
30
30
  /**
31
- * A group object, containing metadata about a group as well as its join conditions and states
31
+ * A group object, containing metadata about a group as well as its join conditions and states. Some properties vary based on the endpoint the object came from.
32
32
  * @typedef {Object} SidechatGroup
33
33
  * @prop {String} id - alphanumeric ID of group
34
34
  * @prop {String} name - human-readable name of group
@@ -47,22 +47,60 @@
47
47
 
48
48
  /**
49
49
  * An asset object, containing information about an image within a post or comment
50
- * @typedef {Object} SidechatAsset
50
+ * @typedef {Object} SidechatSimpleAsset
51
51
  * @prop {String} id - alphanumeric ID of asset
52
52
  * @prop {"image"} type - undocumented
53
53
  * @prop {"jpeg"|"png"|"gif"} content_type - file type of asset
54
- * @prop {Number} width - the width of asset
55
- * @prop {Number} height - the height of asset
54
+ * @prop {Number} width - width of asset
55
+ * @prop {Number} height - height of asset
56
56
  * @prop {SidechatPrivateAssetURL} url - URL string of asset's location
57
57
  */
58
58
 
59
59
  /**
60
- * A user's identity information
60
+ * An asset object, containing information about an image from the asset library
61
+ * @typedef {Object} SidechatLibraryAsset
62
+ * @prop {String} id - alphanumeric ID of asset
63
+ * @prop {String} created_at - date string of asset creation time
64
+ * @prop {SidechatAssetMetadata} metadata - metadata associated with asset
65
+ * @prop {SidechatPrivateAssetURL} url - URL string of asset's location
66
+ */
67
+
68
+ /**
69
+ * An asset object, containing information about an image from the asset library
70
+ * @typedef {Object} SidechatAssetMetadata
71
+ * @prop {Number} width - width of asset
72
+ * @prop {Number} height - height of asset
73
+ * @prop {"image"} type - undocumented
74
+ * @prop {"jpeg"|"png"|"gif"} content_type - file type of asset
75
+ */
76
+
77
+ /**
78
+ * A user's anonymous identity information
61
79
  * @typedef {Object} SidechatIdentity
62
80
  * @prop {String} name - representation of user's name (varies across app)
63
81
  * @prop {Boolean} posted_with_username - undocumented
64
82
  */
65
83
 
84
+ /**
85
+ * The current user's information
86
+ * @typedef {Object} SidechatCurrentUser
87
+ * @prop {String} id - alphanumeric ID of current user
88
+ * @prop {String} hashedVerifiedEmail - verified email of current user in an unreadable hashed form
89
+ * @prop {Boolean} isGlobalModerator - whether or not user is a moderator
90
+ * @prop {Boolean} isGlobalAdmin - whether or not user is an admin
91
+ * @prop {SidechatMembership[]} memberships
92
+ * @prop {Array} roles - undocumented
93
+ * @prop {String} emailDomain - domain of verified email address on account
94
+ * @prop {String} wildcardEmailDomain - domain of verified email address on account, preceeded by *. to support subdomains
95
+ */
96
+
97
+ /**
98
+ * Representation of a group membership
99
+ * @typedef {Object} SidechatMembership
100
+ * @prop {String} groupId - alphanumeric ID of group
101
+ * @prop {String} type - role of current user in group
102
+ */
103
+
66
104
  /**
67
105
  * An asset URL that can only be accessed by making a request with a user's bearer token attached in the Authorization header
68
106
  * @typedef {String} SidechatPrivateAssetURL