├── .gitignore ├── README.md ├── clippings ├── Route Menus.maxpat └── to_from_Server.maxpat ├── docs ├── README.md ├── refpages │ ├── CH-Chat.maxref.xml │ ├── CH-Client.maxref.xml │ ├── CH-ClientTesting.maxref.xml │ ├── CH-Controls.maxref.xml │ ├── CH-Events.maxref.xml │ ├── CH-Rooms.maxref.xml │ ├── Collab-Hub Modules.maxref.xml │ └── _c74_ref_modules.xml ├── topics │ └── Collab-Hub_topic.maxvig.xml ├── tutorial-patchers │ ├── 01-Connecting.maxpat │ ├── 02-Sending Data.maxpat │ └── 03-Receiving Data.maxpat └── tutorials │ ├── _c74_tut_common.xsl │ └── ch-tut │ ├── 00-ch-index.maxtut.xml │ ├── 01-Getting Connected.maxtut.xml │ ├── 02-Sending Data.maxtut.xml │ ├── 03-Receiving Data.maxtut.xml │ ├── 04-Rooms.maxtut.xml │ ├── 05-Push and Publish.maxtut.xml │ ├── _c74_tut.xsl │ ├── images │ ├── 01a_CH-Client.png │ ├── 01b_CH-Client_Connected.png │ ├── 01c_CH-Client_Change_Username.png │ ├── 01d_CH-Client_Multiple_Connections.png │ ├── 02_CH-Client_inlets_outlets.png │ ├── 02_Control_Value.png │ ├── 02_Control_XY.png │ ├── 02_Event_Targets.png │ ├── 02_to_and_from_Server.png │ ├── 03_Route_by_Header.png │ ├── 03_Using Sender Flags.png │ ├── 04-Rooms.png │ ├── 04-Rooms_Details.png │ ├── 05-CH-Controls details.png │ ├── 05-CH-Controls module.png │ ├── 05-CH-Events details.png │ ├── 05-CH-Events module.png │ ├── 05-Publish Max Example.png │ └── 05-Push Max Example.png │ ├── tzeropage.html │ └── tzeropage.js ├── examples ├── CH-Collaborative-Web-Sequencer │ ├── CH-Collaborative-Web-Sequencer.maxpat │ └── local_seq_four_tracks.maxpat ├── CH-Controls-and-Events.maxpat ├── CH-Drum-Demo.maxpat ├── CH-Max-Web-Audience Participation.maxpat ├── CH-Push-Publish-Rooms.maxpat ├── CH-Sequence-Trader │ ├── CH-Sequencer-Trader.maxpat │ └── bpatchers │ │ ├── local_seq.maxpat │ │ └── send_seq.maxpat ├── CH-Simple-Routing.maxpat ├── Mapping-Strategies.maxpat ├── README.md └── resources │ ├── lookupTable.maxpat │ ├── manyOsc.maxpat │ ├── mass-biquad.gendsp │ ├── simpleFM.maxpat │ ├── simpleSaw.maxpat │ └── stepSeq.maxpat ├── extras └── Collab-Hub Modules.maxpat ├── help ├── CH-Chat.maxhelp ├── CH-Client.maxhelp ├── CH-ClientTesting.maxhelp ├── CH-Controls.maxhelp ├── CH-Events.maxhelp └── CH-Rooms.maxhelp ├── icon.png ├── javascript ├── CH-Chat-JS.js ├── CH-Chat-UI.html ├── CH-ClientInstanceManager.js ├── CH-ClientScript.js ├── CH_Palette.maxpalette ├── config.json ├── node_modules │ ├── .package-lock.json │ ├── @types │ │ └── component-emitter │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── index.d.ts │ │ │ └── package.json │ ├── backo2 │ │ ├── .npmignore │ │ ├── History.md │ │ ├── Makefile │ │ ├── Readme.md │ │ ├── component.json │ │ ├── index.js │ │ ├── package.json │ │ └── test │ │ │ └── index.js │ ├── base64-arraybuffer │ │ ├── .npmignore │ │ ├── .travis.yml │ │ ├── LICENSE-MIT │ │ ├── README.md │ │ ├── lib │ │ │ └── base64-arraybuffer.js │ │ └── package.json │ ├── component-emitter │ │ ├── History.md │ │ ├── LICENSE │ │ ├── Readme.md │ │ ├── index.js │ │ └── package.json │ ├── debug │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ └── src │ │ │ ├── browser.js │ │ │ ├── common.js │ │ │ ├── index.js │ │ │ └── node.js │ ├── engine.io-client │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── contrib │ │ │ └── xmlhttprequest-ssl │ │ │ │ └── XMLHttpRequest.js │ │ ├── dist │ │ │ ├── engine.io.js │ │ │ └── engine.io.min.js │ │ ├── lib │ │ │ ├── globalThis.browser.js │ │ │ ├── globalThis.js │ │ │ ├── index.js │ │ │ ├── socket.js │ │ │ ├── transport.js │ │ │ ├── transports │ │ │ │ ├── index.js │ │ │ │ ├── polling-jsonp.js │ │ │ │ ├── polling-xhr.js │ │ │ │ ├── polling.js │ │ │ │ ├── websocket-constructor.browser.js │ │ │ │ ├── websocket-constructor.js │ │ │ │ └── websocket.js │ │ │ ├── util.js │ │ │ └── xmlhttprequest.js │ │ └── package.json │ ├── engine.io-parser │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── Readme.md │ │ ├── lib │ │ │ ├── commons.js │ │ │ ├── decodePacket.browser.js │ │ │ ├── decodePacket.js │ │ │ ├── encodePacket.browser.js │ │ │ ├── encodePacket.js │ │ │ └── index.js │ │ └── package.json │ ├── has-cors │ │ ├── .npmignore │ │ ├── History.md │ │ ├── Makefile │ │ ├── Readme.md │ │ ├── component.json │ │ ├── index.js │ │ ├── package.json │ │ └── test.js │ ├── ms │ │ ├── index.js │ │ ├── license.md │ │ ├── package.json │ │ └── readme.md │ ├── parseqs │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── README.md │ │ ├── index.js │ │ ├── package.json │ │ └── test.js │ ├── parseuri │ │ ├── History.md │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── README.md │ │ ├── index.js │ │ ├── package.json │ │ └── test.js │ ├── socket.io-client │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── manager.d.ts │ │ │ ├── manager.js │ │ │ ├── on.d.ts │ │ │ ├── on.js │ │ │ ├── socket.d.ts │ │ │ ├── socket.js │ │ │ ├── typed-events.d.ts │ │ │ ├── typed-events.js │ │ │ ├── url.d.ts │ │ │ └── url.js │ │ ├── dist │ │ │ ├── socket.io.js │ │ │ ├── socket.io.js.map │ │ │ ├── socket.io.min.js │ │ │ ├── socket.io.min.js.map │ │ │ ├── socket.io.msgpack.min.js │ │ │ └── socket.io.msgpack.min.js.map │ │ ├── package.json │ │ └── wrapper.mjs │ ├── socket.io-parser │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── Readme.md │ │ ├── dist │ │ │ ├── binary.d.ts │ │ │ ├── binary.js │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── is-binary.d.ts │ │ │ └── is-binary.js │ │ └── package.json │ ├── ws │ │ ├── LICENSE │ │ ├── README.md │ │ ├── browser.js │ │ ├── index.js │ │ ├── lib │ │ │ ├── buffer-util.js │ │ │ ├── constants.js │ │ │ ├── event-target.js │ │ │ ├── extension.js │ │ │ ├── limiter.js │ │ │ ├── permessage-deflate.js │ │ │ ├── receiver.js │ │ │ ├── sender.js │ │ │ ├── stream.js │ │ │ ├── validation.js │ │ │ ├── websocket-server.js │ │ │ └── websocket.js │ │ └── package.json │ └── yeast │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json ├── package-lock.json └── package.json ├── license.md ├── media └── img │ ├── CH-Diagram-transparent.png │ ├── CH-Diagram.png │ ├── CH-Small-Logo-NoText.png │ ├── CH-Title.png │ ├── Collab-Hub-Style.jpg │ ├── Max-Logo.png │ ├── become-a-patron-button.png │ ├── for-bpatchers │ ├── CH-Chat-Title.png │ ├── CH-Client-Title.png │ ├── CH-Controls-Title.png │ ├── CH-Events-Title.png │ ├── CH-Rooms-Title.png │ └── CH-Titles.svg │ └── for-readme │ ├── Chat-Cap.jpeg │ ├── Chat-Cap.png │ ├── Client-Cap.png │ ├── Controls-Cap.jpeg │ ├── Demo-Cap.png │ ├── Events-Cap.jpeg │ ├── Rooms-Cap.jpeg │ └── Script-Cap.png ├── package-info.json ├── patchers ├── CH-Chat.maxpat ├── CH-Client.maxpat ├── CH-ClientTesting.maxpat ├── CH-Controls.maxpat ├── CH-Events.maxpat ├── CH-Rooms.maxpat └── CH-Together.bak.maxpat └── templates └── collab-hub-template.maxpat /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .vscode 3 | 4 | -------------------------------------------------------------------------------- /clippings/to_from_Server.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 2, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 160.0, 140.0, 640.0, 480.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-28", 44 | "maxclass" : "newobj", 45 | "numinlets" : 0, 46 | "numoutlets" : 1, 47 | "outlettype" : [ "" ], 48 | "patching_rect" : [ 17.0, 90.0, 97.0, 22.0 ], 49 | "text" : "r fromCH-Server" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-1", 56 | "maxclass" : "newobj", 57 | "numinlets" : 1, 58 | "numoutlets" : 0, 59 | "patching_rect" : [ 17.0, 50.0, 85.0, 22.0 ], 60 | "text" : "s toCH-Server" 61 | } 62 | 63 | } 64 | ], 65 | "lines" : [ ], 66 | "dependency_cache" : [ ], 67 | "autosave" : 0, 68 | "styles" : [ { 69 | "name" : "AudioStatus_Menu", 70 | "default" : { 71 | "bgfillcolor" : { 72 | "angle" : 270, 73 | "autogradient" : 0, 74 | "color" : [ 0.294118, 0.313726, 0.337255, 1 ], 75 | "color1" : [ 0.454902, 0.462745, 0.482353, 0 ], 76 | "color2" : [ 0.290196, 0.309804, 0.301961, 1 ], 77 | "proportion" : 0.39, 78 | "type" : "color" 79 | } 80 | 81 | } 82 | , 83 | "parentstyle" : "", 84 | "multi" : 0 85 | } 86 | , { 87 | "name" : "blues", 88 | "default" : { 89 | "accentcolor" : [ 0.691232, 0.993878, 0.999509, 1.0 ], 90 | "bgcolor" : [ 0.240323, 0.247547, 0.573641, 1.0 ], 91 | "bgfillcolor" : { 92 | "angle" : 270.0, 93 | "autogradient" : 0, 94 | "color" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 95 | "color1" : [ 0.0, 0.078431, 0.321569, 1.0 ], 96 | "color2" : [ 0.240323, 0.247547, 0.573641, 1.0 ], 97 | "proportion" : 0.39, 98 | "type" : "gradient" 99 | } 100 | , 101 | "color" : [ 0.897845, 0.934085, 0.993504, 1.0 ], 102 | "elementcolor" : [ 0.0, 0.078431, 0.321569, 1.0 ], 103 | "patchlinecolor" : [ 0.495624, 0.529709, 0.636972, 0.9 ], 104 | "textcolor" : [ 0.0, 0.078431, 0.321569, 1.0 ], 105 | "textcolor_inverse" : [ 1.0, 1.0, 1.0, 1.0 ] 106 | } 107 | , 108 | "parentstyle" : "", 109 | "multi" : 0 110 | } 111 | , { 112 | "name" : "max6box", 113 | "default" : { 114 | "accentcolor" : [ 0.8, 0.839216, 0.709804, 1.0 ], 115 | "bgcolor" : [ 1.0, 1.0, 1.0, 0.5 ], 116 | "textcolor_inverse" : [ 0.0, 0.0, 0.0, 1.0 ] 117 | } 118 | , 119 | "parentstyle" : "", 120 | "multi" : 0 121 | } 122 | , { 123 | "name" : "max6inlet", 124 | "default" : { 125 | "color" : [ 0.423529, 0.372549, 0.27451, 1.0 ] 126 | } 127 | , 128 | "parentstyle" : "", 129 | "multi" : 0 130 | } 131 | , { 132 | "name" : "max6message", 133 | "default" : { 134 | "bgfillcolor" : { 135 | "angle" : 270.0, 136 | "autogradient" : 0, 137 | "color" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 138 | "color1" : [ 0.866667, 0.866667, 0.866667, 1.0 ], 139 | "color2" : [ 0.788235, 0.788235, 0.788235, 1.0 ], 140 | "proportion" : 0.39, 141 | "type" : "gradient" 142 | } 143 | , 144 | "textcolor_inverse" : [ 0.0, 0.0, 0.0, 1.0 ] 145 | } 146 | , 147 | "parentstyle" : "max6box", 148 | "multi" : 0 149 | } 150 | , { 151 | "name" : "max6outlet", 152 | "default" : { 153 | "color" : [ 0.0, 0.454902, 0.498039, 1.0 ] 154 | } 155 | , 156 | "parentstyle" : "", 157 | "multi" : 0 158 | } 159 | ] 160 | } 161 | 162 | } 163 | -------------------------------------------------------------------------------- /docs/refpages/CH-Chat.maxref.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Chat Module for Collab-Hub 7 | 8 | 9 | 10 | Send chat messages to other clients. Messages can be sent to specific destinations of a username, a roomname, or keyword 'all'. Chat messages will appear in the right-side panel. 11 | 12 | 13 | 14 | 15 | Nick Hwang, Eric Sheffield, and Anthony T. Marasco 16 | Collab-Hub 17 | Networking 18 | Chat 19 | 20 | 21 | 22 | 23 | 24 | All Collab-Hub components have one inlet which can be used to send messages to the Server. Please see CH-Client for available messages. 25 | 26 | 27 | 28 | 29 | 30 | 31 | All Collab-Hub components have one outlet which can be used to route incoming messages from the Server. 32 | 33 | 34 | 35 | 36 | 41 | 42 | 43 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /docs/refpages/CH-Client.maxref.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Connect to the Collab-Hub Server. Client Module for Collab-Hub. 8 | 9 | 10 | 11 | When using Collab-Hub, only one instance of the CH-Client module is needed. If you have more than one instance of the CH-Client module, disable all but one of them. 12 | 13 | 14 | 15 | 16 | Nick Hwang, Eric Sheffield, and Anthony T. Marasco 17 | Collab-Hub 18 | Networking 19 | Client 20 | 21 | 22 | 23 | 24 | 25 | All Collab-Hub components have one inlet which can be used to send messages to the Server. Please see CH-Client for available messages. 26 | 27 | 28 | 29 | 30 | 31 | 32 | Incoming data messages. 33 | 34 | 35 | 36 | 37 | 38 | 39 | Enable or disable the Client Module 40 | 41 | 42 | 43 | 44 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /docs/refpages/CH-ClientTesting.maxref.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Node Debugging for Client Module. 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Nick Hwang, Eric Sheffield, and Anthony T. Marasco 16 | Collab-Hub 17 | Networking 18 | Client 19 | 20 | 21 | 22 | 23 | 24 | All Collab-Hub components have one inlet which can be used to send messages to the Server. Please see CH-Client for available messages. 25 | 26 | 27 | 28 | 29 | 30 | 31 | Incoming data messages. 32 | 33 | 34 | 35 | 36 | 41 | 42 | 43 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /docs/refpages/CH-Controls.maxref.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Observe Published Controls on the Collab-Hub Server. 8 | 9 | 10 | 11 | One method of sharing data is through Publishing and Observing Controls. 12 | When a Control is published and is available, you can observe that Control. You observe Controls in Max with the CH-Control module. 13 | 14 | 15 | 16 | 17 | Nick Hwang, Eric Sheffield, and Anthony T. Marasco 18 | Collab-Hub 19 | Networking 20 | Client 21 | 22 | 23 | 24 | 25 | 26 | All Collab-Hub components have one inlet which can be used to send messages to the Server. Please see CH-Client for available messages. 27 | 28 | 29 | 30 | 31 | 32 | 33 | Incoming data messages. 34 | 35 | 36 | 37 | 38 | 43 | 44 | 45 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /docs/refpages/CH-Events.maxref.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Observe Published Events on the Collab-Hub Server. 8 | 9 | 10 | 11 | One method of sharing data is through Publishing and Observing Events. 12 | When an Event is published and is available, you can observe that Event. You observe Events in Max with the CH-Events module. 13 | 14 | 15 | 16 | 17 | 18 | Nick Hwang, Eric Sheffield, and Anthony T. Marasco 19 | Collab-Hub 20 | Networking 21 | Client 22 | 23 | 24 | 25 | 26 | 27 | All Collab-Hub components have one inlet which can be used to send messages to the Server. Please see CH-Client for available messages. 28 | 29 | 30 | 31 | 32 | 33 | 34 | Incoming data messages. 35 | 36 | 37 | 38 | 39 | 44 | 45 | 46 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /docs/refpages/CH-Rooms.maxref.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Rooms Module for Collab-Hub. 8 | 9 | 10 | 11 | Users can create, join, and leave rooms. Rooms may be used to share data (Controls and Events). 12 | 13 | 14 | 15 | 16 | Nick Hwang, Eric Sheffield, and Anthony T. Marasco 17 | Collab-Hub 18 | Networking 19 | Client 20 | 21 | 22 | 23 | 24 | 25 | All Collab-Hub components have one inlet which can be used to send messages to the Server. Please see CH-Client for available messages. 26 | 27 | 28 | 29 | 30 | 31 | 32 | Incoming data messages. 33 | 34 | 35 | 36 | 37 | 42 | 43 | 44 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /docs/refpages/Collab-Hub Modules.maxref.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | The Collection of Collab-Hub Modules. 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Nick Hwang, Eric Sheffield, and Anthony T. Marasco 15 | Collab-Hub 16 | Networking 17 | Chat 18 | 19 | 20 | 21 | 22 | 23 | All Collab-Hub components have one inlet which can be used to send messages to the Server. Please see CH-Client for available messages. 24 | 25 | 26 | 27 | 28 | 29 | 30 | Audio signal: Left channel output. 31 | 32 | 33 | Audio signal: Right channel output. 34 | 35 | 36 | 37 | 38 | 43 | 44 | 45 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /docs/refpages/_c74_ref_modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | max-ref 22 | jit-ref 23 | kernel-ref 24 | msp-ref 25 | m4l-ref 26 | -------------------------------------------------------------------------------- /docs/topics/Collab-Hub_topic.maxvig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Nick Hwang 6 | Collab-Hub 7 | 8 | 9 |

Collab-Hub Package

10 |

Collab-Hub is a server-based networking tool for sharing control data and 11 | events between creative applications - built off Node.Js and libraries we’ve 12 | written it work with Max, PD, Arduino, 13 | Web, JS libraries, and more. 14 | These modules are part of the Max client. 15 |

16 |

17 | Other clients for Collab-Hub can be found at http://www.collab-hub.io. 18 |

19 | 20 |

Collab-Hub Max Modules

21 | 38 | 39 |

Web Interface

40 | 45 | 46 |

Tutorials

47 | 61 | 62 |

Concepts

63 | 64 | 70 | 71 | 72 | 73 |

Example Patches

74 | 75 |
    76 |
  • 77 | Simple Routing - Example patch for routing
  • 78 |
  • 79 | Cross Platform Drums - Trigger drum synths (in Max and Web)
  • 80 |
  • 81 | Sequencer Trader - Collaboratively create a drum sequence
  • 82 |
  • 83 | Mapping Mapping-Strategies.maxpat - Examples in creative mapping.
  • 84 |
85 | 86 | 87 | 88 |
89 | -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/00-ch-index.maxtut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Getting Connected 7 | 8 |

Collab-Hub: Getting Started

9 | 10 |

Collab-Hub is a server-based networking tool for sharing control data and events between creative applications - built off Node.Js and libraries, we've written it work with Max, PD, Arduino, Web, JS libraries, and more. These modules are part of the Max client.

11 | 12 |

13 | Other clients for Collab-Hub can be found at http://www.collab-hub.io. 14 |

15 | 16 |

Getting Started with Collab-Hub with Max

17 |

If you've never used Collab-Hub, please use this tutorial to familiarize yourself with the modules. The following tutorials will guide you through

18 | 24 | 25 |

While following along, the Collab-Hub Web Interface will help you understand your interaction with Collab-Hub. The Web Interface is acting as another user/client on the server, which can do all the same things the Max modules can do: send and receive data, change username, join and leave rooms, observe to published data, and send/receive chat.

26 | 27 |

Further Questions? Feel free to email us at info@collab-hub.io. Or visit our Discord at https://discord.com/invite/NANZf5RuRV.

28 | 29 |

Topics

30 | 38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/01-Getting Connected.maxtut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Creating objects and connections 8 | 9 | 10 | Sending Data 11 | Collab-Hub Tutorials 12 | 13 | 14 | Nick Hwang 15 | Collab-Hub 16 | 17 | 18 | 19 | 20 |

Connecting to and disconnecting from the Collab-Hub server

21 |

The CH-Client is the module that connects you to the server.

22 | The Collab-Hub Client Module 23 |

Clicking on 'Connect' will initiate the connection with the server.

24 |

You should receive feedback when connected...

25 | 31 | 32 | You are now connected to the server with your username. 33 |
34 |
35 | 36 | The Collab-Hub Client Module showing a connection to the Server, current username, and list of connected users. 37 | 38 |

Using multiple CH-Client modules

39 |

You can have multiple CH-Client modules in your Max patch, but only one module should be connected to the server.

40 |

The modules are aware of each other and will only allow one connection to the server at a time. A pop-up dialog window will warn you if you try to connect to the server while another module is already connected.

41 | 42 | The pop-up dialog warning of multiple connections, offering the option to connect with a different CH-Client module. 43 | Because only one module can connect to the server at a time, we suggest you check your connection and messages using the Collab-Hub Demo Interface. You will be able to see your username on the user list, send and receive messages, and all other actions. See later tutorials for details. 44 | 45 | 46 |
47 |

Disconnecting from the server

48 |

To disconnect from the server, click on the Disconnect button.

49 | 50 |

Change your Username

51 |

You can change your username by clicking on your username -- a dialog window will appear.

52 |

After you have input a new username, click on 'OK'.

53 |

A new 'serverMessage' will appear in the Max Console: 'Username updated:...'

54 | Dialog for Username input 55 |
56 | 57 |

Summary

58 |

The Collab-Hub Client Module is the module that connects you to the server. It is the only module which can connect to the server. All other modules receive information from the CH-Client module. After the client module connects, you can change your username and send a 'simple chat' message to all users.

59 |
60 | 61 | 62 |
63 | -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/04-Rooms.maxtut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Receiving Data 10 | Push and Publish 11 | Collab-Hub Tutorials 12 | Rooms 13 | 14 | 15 | Nick Hwang 16 | Collab-Hub 17 | 18 | 19 | 20 |

Rooms

21 | 22 |

Rooms for Routing

23 | 24 |

While following along, the Collab-Hub Web Interface will help you understand your interaction with Collab-Hub. The Web Interface is acting as another user/client on the server, which can do all the same things the Max modules can do: send and receive data, change username, join and leave rooms, observe to published data, and send/receive chat.

25 |
26 | 27 |

Rooms are a feature of Collab-Hub that allows for users to route messages to users with them. You can send messages to users within in rooms whether you are also in the room or not. Through our Max Package, you are able to create, join, and leave rooms.

28 |

All message types (Control, Event, and Chat) can be routed to rooms.

29 |

When you create a room, you are automatically joined to the room. If you are last to leave the room, the room is deleted.

30 | 31 | 32 | 33 | Create, Join, and Leave rooms with the CH-Rooms module. 34 | 35 | 36 |

Details on Rooms

37 |

You can see the other users within in a room by clicking on the Details button in the CH-Rooms module

38 |
39 | 40 | 41 | 42 | See the users in each room. 43 | 44 |

Sending data to Rooms

45 |

Previously, we set the 'target' component of our messages to 'all'. If you are using rooms with collaborators, you can send messages by naming the room as the second item in the message list:
46 | [mode] [roomname] [header] [values] 47 |

48 | 49 |

Try Sending Data to a Room

50 |

Try creating a room and joining from the CH-Room module. Then send a message to the room from the Web Interface: 51 | 52 | At the time of writing this tutorial, webSlider4 and webEvent4 send to room '123'. In Max, you can create and join a room '123', and you should be able to send webSlider4 and webEvent4 messages to Max -- make sure to set up your route object for those particular headers.

53 |

The web interface will push the message to the room. If you're in that room, you'll receive that message.

54 | 55 |

You can also try sending to a room from the Max module. In the Max module, you can send messages to the room by setting the target to the roomname.

56 | 57 |

More Info

58 |

Please look at the Rooms tab in our Concepts: Push, Publish, Rooms patcher for more information on Rooms.

59 |

We have included a 'clipping' of how you might use a Umenu to populate room options. You might find this useful if you want to dynamically send messages to users in different rooms.

60 | 61 | 62 |
63 | -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/_c74_tut.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/01a_CH-Client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/01a_CH-Client.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/01b_CH-Client_Connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/01b_CH-Client_Connected.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/01c_CH-Client_Change_Username.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/01c_CH-Client_Change_Username.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/01d_CH-Client_Multiple_Connections.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/01d_CH-Client_Multiple_Connections.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/02_CH-Client_inlets_outlets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/02_CH-Client_inlets_outlets.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/02_Control_Value.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/02_Control_Value.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/02_Control_XY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/02_Control_XY.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/02_Event_Targets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/02_Event_Targets.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/02_to_and_from_Server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/02_to_and_from_Server.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/03_Route_by_Header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/03_Route_by_Header.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/03_Using Sender Flags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/03_Using Sender Flags.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/04-Rooms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/04-Rooms.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/04-Rooms_Details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/04-Rooms_Details.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/05-CH-Controls details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/05-CH-Controls details.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/05-CH-Controls module.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/05-CH-Controls module.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/05-CH-Events details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/05-CH-Events details.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/05-CH-Events module.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/05-CH-Events module.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/05-Publish Max Example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/05-Publish Max Example.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/images/05-Push Max Example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/docs/tutorials/ch-tut/images/05-Push Max Example.png -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/tzeropage.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Max Tutorial Zero: Always Save Your Work 10 | 11 | 12 | Tutorial Zero: Always Save Your Work

13 |
14 | 17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/tutorials/ch-tut/tzeropage.js: -------------------------------------------------------------------------------- 1 | // tzeropage.js 2 | 3 | function InsertSampleMovie(filename) 4 | { 5 | document.write('\n'); 6 | document.write('\n'); 7 | document.write('\n'); 8 | document.write('\n'); 9 | document.write('\n'); 10 | document.write('') 11 | document.write('\n'); 12 | } 13 | -------------------------------------------------------------------------------- /examples/README.md: -------------------------------------------------------------------------------- 1 | # Examples 2 | 3 | The patches in this folder are provided for general demonstration and use during workshops. -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/icon.png -------------------------------------------------------------------------------- /javascript/CH-Chat-JS.js: -------------------------------------------------------------------------------- 1 | (function (){ 2 | window.max.bindInlet("chat", setMessage); 3 | window.max.bindInlet("clear", clearMessages); 4 | 5 | let chatnode = document.querySelector("#chat-main"); 6 | 7 | function clearMessages() { 8 | chatnode.innerHTML = ""; 9 | } 10 | 11 | function setMessage(message) { 12 | console.log("set message"); 13 | let index = message.indexOf(":"); 14 | 15 | let sender = message.substring(0, index); 16 | max.outlet("sender", sender); 17 | let chat = message.substring(index, message.length); 18 | const newnode = document.createElement("li"); 19 | newnode.innerHTML = `${sender} ${chat}`; 20 | document.getElementById("chat-main").prepend(newnode); 21 | // document.getElementById("chat-main").appendChild(newnode); 22 | } 23 | })(); -------------------------------------------------------------------------------- /javascript/CH-Chat-UI.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 53 | 54 | 55 |
56 | 94 |
95 | 96 | 97 | 102 | 103 | 104 | -------------------------------------------------------------------------------- /javascript/CH-ClientInstanceManager.js: -------------------------------------------------------------------------------- 1 | // Edited: 3/4/2022 - Nick Hwang 2 | // keeps track of connected client modules, using a dictionary 3 | // helps handle disconnect and reconnect scenarios regarding multiple clients 4 | 5 | inlets = 1; 6 | outlets = 1; 7 | 8 | var CH_CLIENT_DICT_NAME = "CH-Clients"; 9 | var clientDict = new Dict(CH_CLIENT_DICT_NAME); 10 | 11 | var thisClient; 12 | 13 | function start() { 14 | // post("start, keys?:", clientDict.getkeys()); 15 | } 16 | 17 | function client() { 18 | var a = arrayfromargs(messagename, arguments); 19 | // post("received message " + a + "\n"); 20 | thisClient = a[1].toString(); 21 | 22 | clientDict.set(thisClient, thisClient); 23 | if (clientDict.get("connected") != null && clientDict.getkeys().length == 2) { 24 | // post("removing connected bc we have no more clients \n"); 25 | clientDict.remove("connected"); 26 | } 27 | } 28 | 29 | function close() { 30 | // post("closing " + thisClient + "\n"); 31 | if (clientDict.contains(thisClient)) { 32 | clientDict.remove(thisClient); 33 | } 34 | 35 | // max dictionary sometimes includes carriage return / line breaks. Remove them. 36 | var connectedClient = clientDict.contains("connected") ? clientDict.get("connected").toString().replace(/[\r\n]+/ig, "") : null; 37 | 38 | if ( 39 | clientDict.contains("connected") && 40 | connectedClient == thisClient 41 | ) { 42 | clientDict.remove("connected"); 43 | } 44 | 45 | if (clientDict.getkeys() == null) { 46 | return; 47 | } 48 | 49 | if (clientDict.getkeys().length == 9 && clientDict.contains("connected")) { 50 | clientDict.remove("connected"); 51 | } 52 | } 53 | 54 | // attempt to connect, but first check if already connected 55 | function attempt() { 56 | var a = arrayfromargs(messagename, arguments); 57 | // post("received attempt: " + thisClient + "\n"); 58 | 59 | // max dictionary sometimes includes carriage return / line breaks. Remove them. 60 | var connectedClient = clientDict.contains("connected") ? clientDict.get("connected").toString().replace(/[\r\n]+/ig, "") : null; 61 | 62 | if ( 63 | clientDict.contains("connected") && 64 | connectedClient != thisClient 65 | ) { 66 | // another module is connected, so we need to load a popup 67 | outlet(0, "popup"); 68 | } else { 69 | // post("no other connections, so connect this module \n"); 70 | outlet(0, "connect"); 71 | } 72 | } 73 | 74 | // from client module 75 | function connection() { 76 | var a = arrayfromargs(messagename, arguments); 77 | 78 | // disconnect, remove from 'connected' 79 | // max dictionary sometimes includes carriage return / line breaks. Remove them. 80 | var connectedClient = clientDict.contains("connected") ? clientDict.get("connected").toString().replace(/[\r\n]+/ig, "") : null; 81 | 82 | if (arguments[0] == "0" && connectedClient == thisClient) { 83 | clientDict.remove("connected"); 84 | } 85 | 86 | if (arguments[0] == "1") { 87 | clientDict.set("connected", thisClient + "\n"); 88 | } 89 | } 90 | 91 | function confirm() { 92 | var a = arrayfromargs(messagename, arguments); 93 | // post("received confirm: " + arguments[0] + "\n"); 94 | 95 | // max dictionary sometimes includes carriage return / line breaks. Remove them. 96 | var connectedClient = clientDict.contains("connected") ? clientDict.get("connected").toString().replace(/[\r\n]+/ig, "") : null; 97 | 98 | // remove current client from dictionary 99 | // send disconnect message to old client 100 | // send a connect message to this client 101 | if ( 102 | clientDict.contains("connected") && 103 | connectedClient != thisClient 104 | ) { 105 | 106 | var _message = "disconnect " + clientDict.get("connected").toString(); 107 | // post("disconnect message: " + _message); 108 | // outlet(0, "disconnect", clientDict.get("connected").toString()); 109 | outlet(0, _message); 110 | outlet(0, "connect"); 111 | // post("disconnecting " + clientDict.get("connected")); 112 | return; 113 | } 114 | } -------------------------------------------------------------------------------- /javascript/CH_Palette.maxpalette: -------------------------------------------------------------------------------- 1 | { 2 | "label" : "CH_Palette", 3 | "usercolors" : [ { 4 | "colorinfo" : [ 0.0, 0.6, 0.2, 1.0, 0.0, 0.6, 0.2, 1.0, "mix with black", 0, 0.0 ] 5 | } 6 | , { 7 | "colorinfo" : [ 0.6, 0.8, 0.6, 1.0, 0.6, 0.8, 0.6, 1.0, "mix with black", 0, 0.0 ] 8 | } 9 | , { 10 | "colorinfo" : [ 0.12156862745098, 0.207843137254902, 0.847058823529412, 1.0, 0.12156862745098, 0.207843137254902, 0.847058823529412, 1.0, "mix with black", 0, 0.0 ] 11 | } 12 | , { 13 | "colorinfo" : [ 0.019607843137255, 0.019607843137255, 0.019607843137255, 1.0, 0.015686274509804, 0.015686274509804, 0.015686274509804, 1.0, "mix with black", 1, 1.0 ] 14 | } 15 | , { 16 | "colorinfo" : [ 0.6, 0.8, 0.6, 1.0, 0.6, 0.8, 0.6, 1.0, "mix with black", 0, 0.0 ] 17 | } 18 | , { 19 | "colorinfo" : [ 0.831372549019608, 0.831372549019608, 0.831372549019608, 1.0, 0.576470588235294, 0.576470588235294, 0.576470588235294, 1.0, "mix with black", 2, 1.0 ] 20 | } 21 | , { 22 | "colorinfo" : [ 0.831372549019608, 0.831372549019608, 0.831372549019608, 1.0, 0.831372549019608, 0.831372549019608, 0.831372549019608, 1.0, "mix with black", 0, 1.0 ] 23 | } 24 | , { 25 | "colorinfo" : [ 0.831372549019608, 0.831372549019608, 0.831372549019608, 1.0, 0.450980392156863, 0.450980392156863, 0.450980392156863, 1.0, "mix with black", 3, 1.0 ] 26 | } 27 | , { 28 | "colorinfo" : [ 0.831372549019608, 0.831372549019608, 0.831372549019608, 1.0, 0.329411764705882, 0.329411764705882, 0.329411764705882, 1.0, "mix with black", 4, 1.0 ] 29 | } 30 | , { 31 | "colorinfo" : [ 0.831372549019608, 0.831372549019608, 0.831372549019608, 1.0, 0.329411764705882, 0.329411764705882, 0.329411764705882, 1.0, "mix with black", 4, 1.0 ] 32 | } 33 | , { 34 | "colorinfo" : [ 0.831372549019608, 0.831372549019608, 0.831372549019608, 1.0, 0.329411764705882, 0.329411764705882, 0.329411764705882, 1.0, "mix with black", 4, 1.0 ] 35 | } 36 | , { 37 | 38 | } 39 | , { 40 | 41 | } 42 | , { 43 | 44 | } 45 | , { 46 | 47 | } 48 | , { 49 | 50 | } 51 | , { 52 | 53 | } 54 | , { 55 | 56 | } 57 | , { 58 | 59 | } 60 | , { 61 | "colorinfo" : [ 0.831372549019608, 0.047058823529412, 0.047058823529412, 1.0, 0.701960784313725, 0.03921568627451, 0.03921568627451, 1.0, "mix with black", 1, 1.0 ] 62 | } 63 | , { 64 | "colorinfo" : [ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, "mix with black", 0, 0.0 ] 65 | } 66 | , { 67 | "colorinfo" : [ 0.72156862745098, 0.850980392156863, 0.694117647058824, 1.0, 0.72156862745098, 0.850980392156863, 0.694117647058824, 1.0, "mix with black", 0, 1.0 ] 68 | } 69 | , { 70 | "colorinfo" : [ 0.184312760829926, 0.184312760829926, 0.184312760829926, 1.0, 0.184312760829926, 0.184312760829926, 0.184312760829926, 1.0, "mix with black", 0, 1.0 ] 71 | } 72 | , { 73 | 74 | } 75 | , { 76 | 77 | } 78 | , { 79 | 80 | } 81 | , { 82 | 83 | } 84 | , { 85 | 86 | } 87 | , { 88 | 89 | } 90 | , { 91 | "colorinfo" : [ 0.2, 0.2, 0.2, 1.0, 0.2, 0.2, 0.2, 1.0, "mix with black", 0, 0.0 ] 92 | } 93 | ] 94 | } 95 | -------------------------------------------------------------------------------- /javascript/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "hub", 3 | "username": "", 4 | "server": "" 5 | } -------------------------------------------------------------------------------- /javascript/node_modules/@types/component-emitter/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE 22 | -------------------------------------------------------------------------------- /javascript/node_modules/@types/component-emitter/README.md: -------------------------------------------------------------------------------- 1 | # Installation 2 | > `npm install --save @types/component-emitter` 3 | 4 | # Summary 5 | This package contains type definitions for component-emitter (https://www.npmjs.com/package/component-emitter). 6 | 7 | # Details 8 | Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/component-emitter. 9 | 10 | ### Additional Details 11 | * Last updated: Wed, 09 Sep 2020 21:18:32 GMT 12 | * Dependencies: none 13 | * Global values: none 14 | 15 | # Credits 16 | These definitions were written by [Peter Snider](https://github.com/psnider). 17 | -------------------------------------------------------------------------------- /javascript/node_modules/@types/component-emitter/index.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for component-emitter v1.2.1 2 | // Project: https://www.npmjs.com/package/component-emitter 3 | // Definitions by: Peter Snider 4 | // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped 5 | 6 | // TypeScript Version: 2.2 7 | 8 | interface Emitter { 9 | on(event: Event, listener: Function): Emitter; 10 | once(event: Event, listener: Function): Emitter; 11 | off(event?: Event, listener?: Function): Emitter; 12 | emit(event: Event, ...args: any[]): Emitter; 13 | listeners(event: Event): Function[]; 14 | hasListeners(event: Event): boolean; 15 | } 16 | 17 | declare const Emitter: { 18 | (obj?: object): Emitter; 19 | new (obj?: object): Emitter; 20 | }; 21 | 22 | export = Emitter; 23 | -------------------------------------------------------------------------------- /javascript/node_modules/@types/component-emitter/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "@types/component-emitter@^1.2.10", 3 | "_id": "@types/component-emitter@1.2.10", 4 | "_inBundle": false, 5 | "_integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==", 6 | "_location": "/@types/component-emitter", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "@types/component-emitter@^1.2.10", 12 | "name": "@types/component-emitter", 13 | "escapedName": "@types%2fcomponent-emitter", 14 | "scope": "@types", 15 | "rawSpec": "^1.2.10", 16 | "saveSpec": null, 17 | "fetchSpec": "^1.2.10" 18 | }, 19 | "_requiredBy": [ 20 | "/socket.io-client", 21 | "/socket.io-parser" 22 | ], 23 | "_resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", 24 | "_shasum": "ef5b1589b9f16544642e473db5ea5639107ef3ea", 25 | "_spec": "@types/component-emitter@^1.2.10", 26 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/socket.io-client", 27 | "bugs": { 28 | "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues" 29 | }, 30 | "bundleDependencies": false, 31 | "contributors": [ 32 | { 33 | "name": "Peter Snider", 34 | "url": "https://github.com/psnider" 35 | } 36 | ], 37 | "dependencies": {}, 38 | "deprecated": false, 39 | "description": "TypeScript definitions for component-emitter", 40 | "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped#readme", 41 | "license": "MIT", 42 | "main": "", 43 | "name": "@types/component-emitter", 44 | "repository": { 45 | "type": "git", 46 | "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git", 47 | "directory": "types/component-emitter" 48 | }, 49 | "scripts": {}, 50 | "typeScriptVersion": "3.1", 51 | "types": "index.d.ts", 52 | "typesPublisherContentHash": "446bfc6b04cc0bdf3afbaa65ac393c5c9056ab15d158199b96d266059c762403", 53 | "version": "1.2.10" 54 | } 55 | -------------------------------------------------------------------------------- /javascript/node_modules/backo2/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /javascript/node_modules/backo2/History.md: -------------------------------------------------------------------------------- 1 | 2 | 1.0.1 / 2014-02-17 3 | ================== 4 | 5 | * go away decimal point 6 | * history 7 | 8 | 1.0.0 / 2014-02-17 9 | ================== 10 | 11 | * add jitter option 12 | * Initial commit 13 | -------------------------------------------------------------------------------- /javascript/node_modules/backo2/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --require should \ 5 | --reporter dot \ 6 | --bail 7 | 8 | .PHONY: test -------------------------------------------------------------------------------- /javascript/node_modules/backo2/Readme.md: -------------------------------------------------------------------------------- 1 | # backo 2 | 3 | Simple exponential backoff because the others seem to have weird abstractions. 4 | 5 | ## Installation 6 | 7 | ``` 8 | $ npm install backo 9 | ``` 10 | 11 | ## Options 12 | 13 | - `min` initial timeout in milliseconds [100] 14 | - `max` max timeout [10000] 15 | - `jitter` [0] 16 | - `factor` [2] 17 | 18 | ## Example 19 | 20 | ```js 21 | var Backoff = require('backo'); 22 | var backoff = new Backoff({ min: 100, max: 20000 }); 23 | 24 | setTimeout(function(){ 25 | something.reconnect(); 26 | }, backoff.duration()); 27 | 28 | // later when something works 29 | backoff.reset() 30 | ``` 31 | 32 | # License 33 | 34 | MIT 35 | -------------------------------------------------------------------------------- /javascript/node_modules/backo2/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backo", 3 | "repo": "segmentio/backo", 4 | "dependencies": {}, 5 | "version": "1.0.1", 6 | "description": "simple backoff without the weird abstractions", 7 | "keywords": ["backoff"], 8 | "license": "MIT", 9 | "scripts": ["index.js"], 10 | "main": "index.js" 11 | } 12 | -------------------------------------------------------------------------------- /javascript/node_modules/backo2/index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Expose `Backoff`. 4 | */ 5 | 6 | module.exports = Backoff; 7 | 8 | /** 9 | * Initialize backoff timer with `opts`. 10 | * 11 | * - `min` initial timeout in milliseconds [100] 12 | * - `max` max timeout [10000] 13 | * - `jitter` [0] 14 | * - `factor` [2] 15 | * 16 | * @param {Object} opts 17 | * @api public 18 | */ 19 | 20 | function Backoff(opts) { 21 | opts = opts || {}; 22 | this.ms = opts.min || 100; 23 | this.max = opts.max || 10000; 24 | this.factor = opts.factor || 2; 25 | this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0; 26 | this.attempts = 0; 27 | } 28 | 29 | /** 30 | * Return the backoff duration. 31 | * 32 | * @return {Number} 33 | * @api public 34 | */ 35 | 36 | Backoff.prototype.duration = function(){ 37 | var ms = this.ms * Math.pow(this.factor, this.attempts++); 38 | if (this.jitter) { 39 | var rand = Math.random(); 40 | var deviation = Math.floor(rand * this.jitter * ms); 41 | ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation; 42 | } 43 | return Math.min(ms, this.max) | 0; 44 | }; 45 | 46 | /** 47 | * Reset the number of attempts. 48 | * 49 | * @api public 50 | */ 51 | 52 | Backoff.prototype.reset = function(){ 53 | this.attempts = 0; 54 | }; 55 | 56 | /** 57 | * Set the minimum duration 58 | * 59 | * @api public 60 | */ 61 | 62 | Backoff.prototype.setMin = function(min){ 63 | this.ms = min; 64 | }; 65 | 66 | /** 67 | * Set the maximum duration 68 | * 69 | * @api public 70 | */ 71 | 72 | Backoff.prototype.setMax = function(max){ 73 | this.max = max; 74 | }; 75 | 76 | /** 77 | * Set the jitter 78 | * 79 | * @api public 80 | */ 81 | 82 | Backoff.prototype.setJitter = function(jitter){ 83 | this.jitter = jitter; 84 | }; 85 | 86 | -------------------------------------------------------------------------------- /javascript/node_modules/backo2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "backo2@~1.0.2", 3 | "_id": "backo2@1.0.2", 4 | "_inBundle": false, 5 | "_integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", 6 | "_location": "/backo2", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "backo2@~1.0.2", 12 | "name": "backo2", 13 | "escapedName": "backo2", 14 | "rawSpec": "~1.0.2", 15 | "saveSpec": null, 16 | "fetchSpec": "~1.0.2" 17 | }, 18 | "_requiredBy": [ 19 | "/socket.io-client" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 22 | "_shasum": "31ab1ac8b129363463e35b3ebb69f4dfcfba7947", 23 | "_spec": "backo2@~1.0.2", 24 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/socket.io-client", 25 | "bugs": { 26 | "url": "https://github.com/mokesmokes/backo/issues" 27 | }, 28 | "bundleDependencies": false, 29 | "dependencies": {}, 30 | "deprecated": false, 31 | "description": "simple backoff based on segmentio/backo", 32 | "devDependencies": { 33 | "mocha": "*", 34 | "should": "*" 35 | }, 36 | "homepage": "https://github.com/mokesmokes/backo#readme", 37 | "keywords": [ 38 | "backoff" 39 | ], 40 | "license": "MIT", 41 | "name": "backo2", 42 | "repository": { 43 | "type": "git", 44 | "url": "git+https://github.com/mokesmokes/backo.git" 45 | }, 46 | "version": "1.0.2" 47 | } 48 | -------------------------------------------------------------------------------- /javascript/node_modules/backo2/test/index.js: -------------------------------------------------------------------------------- 1 | 2 | var Backoff = require('..'); 3 | var assert = require('assert'); 4 | 5 | describe('.duration()', function(){ 6 | it('should increase the backoff', function(){ 7 | var b = new Backoff; 8 | 9 | assert(100 == b.duration()); 10 | assert(200 == b.duration()); 11 | assert(400 == b.duration()); 12 | assert(800 == b.duration()); 13 | 14 | b.reset(); 15 | assert(100 == b.duration()); 16 | assert(200 == b.duration()); 17 | }) 18 | }) -------------------------------------------------------------------------------- /javascript/node_modules/base64-arraybuffer/.npmignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | Gruntfile.js 3 | /test/ 4 | -------------------------------------------------------------------------------- /javascript/node_modules/base64-arraybuffer/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '0.12' 4 | - iojs-1 5 | - iojs-2 6 | - iojs-3 7 | - '4.1' 8 | before_script: 9 | - npm install 10 | before_install: npm install -g npm@'>=2.13.5' 11 | deploy: 12 | provider: npm 13 | email: niklasvh@gmail.com 14 | api_key: 15 | secure: oHV9ArprTj5WOk7MP1UF7QMJ70huXw+y7xXb5wF4+V2H8Hyfa5TfE0DiOmqrube1WXTeH1FLgq54shp/sJWi47Hkg/GyeoB5NnsPhYEaJkaON9UG5blML+ODiNVsEnq/1kNBQ8e0+0JItMPLGySKyFmuZ3yflulXKS8O88mfINo= 16 | on: 17 | tags: true 18 | branch: master 19 | repo: niklasvh/base64-arraybuffer 20 | -------------------------------------------------------------------------------- /javascript/node_modules/base64-arraybuffer/LICENSE-MIT: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012 Niklas von Hertzen 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /javascript/node_modules/base64-arraybuffer/README.md: -------------------------------------------------------------------------------- 1 | # base64-arraybuffer 2 | 3 | [![Build Status](https://travis-ci.org/niklasvh/base64-arraybuffer.png)](https://travis-ci.org/niklasvh/base64-arraybuffer) 4 | [![NPM Downloads](https://img.shields.io/npm/dm/base64-arraybuffer.svg)](https://www.npmjs.org/package/base64-arraybuffer) 5 | [![NPM Version](https://img.shields.io/npm/v/base64-arraybuffer.svg)](https://www.npmjs.org/package/base64-arraybuffer) 6 | 7 | Encode/decode base64 data into ArrayBuffers 8 | 9 | ## Getting Started 10 | Install the module with: `npm install base64-arraybuffer` 11 | 12 | ## API 13 | The library encodes and decodes base64 to and from ArrayBuffers 14 | 15 | - __encode(buffer)__ - Encodes `ArrayBuffer` into base64 string 16 | - __decode(str)__ - Decodes base64 string to `ArrayBuffer` 17 | 18 | ## License 19 | Copyright (c) 2012 Niklas von Hertzen 20 | Licensed under the MIT license. 21 | -------------------------------------------------------------------------------- /javascript/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js: -------------------------------------------------------------------------------- 1 | /* 2 | * base64-arraybuffer 3 | * https://github.com/niklasvh/base64-arraybuffer 4 | * 5 | * Copyright (c) 2012 Niklas von Hertzen 6 | * Licensed under the MIT license. 7 | */ 8 | (function(chars){ 9 | "use strict"; 10 | 11 | exports.encode = function(arraybuffer) { 12 | var bytes = new Uint8Array(arraybuffer), 13 | i, len = bytes.length, base64 = ""; 14 | 15 | for (i = 0; i < len; i+=3) { 16 | base64 += chars[bytes[i] >> 2]; 17 | base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)]; 18 | base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)]; 19 | base64 += chars[bytes[i + 2] & 63]; 20 | } 21 | 22 | if ((len % 3) === 2) { 23 | base64 = base64.substring(0, base64.length - 1) + "="; 24 | } else if (len % 3 === 1) { 25 | base64 = base64.substring(0, base64.length - 2) + "=="; 26 | } 27 | 28 | return base64; 29 | }; 30 | 31 | exports.decode = function(base64) { 32 | var bufferLength = base64.length * 0.75, 33 | len = base64.length, i, p = 0, 34 | encoded1, encoded2, encoded3, encoded4; 35 | 36 | if (base64[base64.length - 1] === "=") { 37 | bufferLength--; 38 | if (base64[base64.length - 2] === "=") { 39 | bufferLength--; 40 | } 41 | } 42 | 43 | var arraybuffer = new ArrayBuffer(bufferLength), 44 | bytes = new Uint8Array(arraybuffer); 45 | 46 | for (i = 0; i < len; i+=4) { 47 | encoded1 = chars.indexOf(base64[i]); 48 | encoded2 = chars.indexOf(base64[i+1]); 49 | encoded3 = chars.indexOf(base64[i+2]); 50 | encoded4 = chars.indexOf(base64[i+3]); 51 | 52 | bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); 53 | bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); 54 | bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); 55 | } 56 | 57 | return arraybuffer; 58 | }; 59 | })("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"); 60 | -------------------------------------------------------------------------------- /javascript/node_modules/base64-arraybuffer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "base64-arraybuffer@0.1.4", 3 | "_id": "base64-arraybuffer@0.1.4", 4 | "_inBundle": false, 5 | "_integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", 6 | "_location": "/base64-arraybuffer", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "base64-arraybuffer@0.1.4", 12 | "name": "base64-arraybuffer", 13 | "escapedName": "base64-arraybuffer", 14 | "rawSpec": "0.1.4", 15 | "saveSpec": null, 16 | "fetchSpec": "0.1.4" 17 | }, 18 | "_requiredBy": [ 19 | "/engine.io-client", 20 | "/engine.io-parser" 21 | ], 22 | "_resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", 23 | "_shasum": "9818c79e059b1355f97e0428a017c838e90ba812", 24 | "_spec": "base64-arraybuffer@0.1.4", 25 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/engine.io-client", 26 | "author": { 27 | "name": "Niklas von Hertzen", 28 | "email": "niklasvh@gmail.com", 29 | "url": "http://hertzen.com" 30 | }, 31 | "bugs": { 32 | "url": "https://github.com/niklasvh/base64-arraybuffer/issues" 33 | }, 34 | "bundleDependencies": false, 35 | "deprecated": false, 36 | "description": "Encode/decode base64 data into ArrayBuffers", 37 | "devDependencies": { 38 | "grunt": "^0.4.5", 39 | "grunt-cli": "^0.1.13", 40 | "grunt-contrib-jshint": "^0.11.2", 41 | "grunt-contrib-nodeunit": "^0.4.1", 42 | "grunt-contrib-watch": "^0.6.1" 43 | }, 44 | "engines": { 45 | "node": ">= 0.6.0" 46 | }, 47 | "homepage": "https://github.com/niklasvh/base64-arraybuffer", 48 | "keywords": [], 49 | "licenses": [ 50 | { 51 | "type": "MIT", 52 | "url": "https://github.com/niklasvh/base64-arraybuffer/blob/master/LICENSE-MIT" 53 | } 54 | ], 55 | "main": "lib/base64-arraybuffer", 56 | "name": "base64-arraybuffer", 57 | "repository": { 58 | "type": "git", 59 | "url": "git+https://github.com/niklasvh/base64-arraybuffer.git" 60 | }, 61 | "scripts": { 62 | "test": "grunt nodeunit" 63 | }, 64 | "version": "0.1.4" 65 | } 66 | -------------------------------------------------------------------------------- /javascript/node_modules/component-emitter/History.md: -------------------------------------------------------------------------------- 1 | 2 | 1.3.0 / 2018-04-15 3 | ================== 4 | 5 | * removed bower support 6 | * expose emitter on `exports` 7 | * prevent de-optimization from using `arguments` 8 | 9 | 1.2.1 / 2016-04-18 10 | ================== 11 | 12 | * enable client side use 13 | 14 | 1.2.0 / 2014-02-12 15 | ================== 16 | 17 | * prefix events with `$` to support object prototype method names 18 | 19 | 1.1.3 / 2014-06-20 20 | ================== 21 | 22 | * republish for npm 23 | * add LICENSE file 24 | 25 | 1.1.2 / 2014-02-10 26 | ================== 27 | 28 | * package: rename to "component-emitter" 29 | * package: update "main" and "component" fields 30 | * Add license to Readme (same format as the other components) 31 | * created .npmignore 32 | * travis stuff 33 | 34 | 1.1.1 / 2013-12-01 35 | ================== 36 | 37 | * fix .once adding .on to the listener 38 | * docs: Emitter#off() 39 | * component: add `.repo` prop 40 | 41 | 1.1.0 / 2013-10-20 42 | ================== 43 | 44 | * add `.addEventListener()` and `.removeEventListener()` aliases 45 | 46 | 1.0.1 / 2013-06-27 47 | ================== 48 | 49 | * add support for legacy ie 50 | 51 | 1.0.0 / 2013-02-26 52 | ================== 53 | 54 | * add `.off()` support for removing all listeners 55 | 56 | 0.0.6 / 2012-10-08 57 | ================== 58 | 59 | * add `this._callbacks` initialization to prevent funky gotcha 60 | 61 | 0.0.5 / 2012-09-07 62 | ================== 63 | 64 | * fix `Emitter.call(this)` usage 65 | 66 | 0.0.3 / 2012-07-11 67 | ================== 68 | 69 | * add `.listeners()` 70 | * rename `.has()` to `.hasListeners()` 71 | 72 | 0.0.2 / 2012-06-28 73 | ================== 74 | 75 | * fix `.off()` with `.once()`-registered callbacks 76 | -------------------------------------------------------------------------------- /javascript/node_modules/component-emitter/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014 Component contributors 4 | 5 | Permission is hereby granted, free of charge, to any person 6 | obtaining a copy of this software and associated documentation 7 | files (the "Software"), to deal in the Software without 8 | restriction, including without limitation the rights to use, 9 | copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following 12 | conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 19 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 21 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 22 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 24 | OTHER DEALINGS IN THE SOFTWARE. 25 | -------------------------------------------------------------------------------- /javascript/node_modules/component-emitter/Readme.md: -------------------------------------------------------------------------------- 1 | # Emitter [![Build Status](https://travis-ci.org/component/emitter.png)](https://travis-ci.org/component/emitter) 2 | 3 | Event emitter component. 4 | 5 | ## Installation 6 | 7 | ``` 8 | $ component install component/emitter 9 | ``` 10 | 11 | ## API 12 | 13 | ### Emitter(obj) 14 | 15 | The `Emitter` may also be used as a mixin. For example 16 | a "plain" object may become an emitter, or you may 17 | extend an existing prototype. 18 | 19 | As an `Emitter` instance: 20 | 21 | ```js 22 | var Emitter = require('emitter'); 23 | var emitter = new Emitter; 24 | emitter.emit('something'); 25 | ``` 26 | 27 | As a mixin: 28 | 29 | ```js 30 | var Emitter = require('emitter'); 31 | var user = { name: 'tobi' }; 32 | Emitter(user); 33 | 34 | user.emit('im a user'); 35 | ``` 36 | 37 | As a prototype mixin: 38 | 39 | ```js 40 | var Emitter = require('emitter'); 41 | Emitter(User.prototype); 42 | ``` 43 | 44 | ### Emitter#on(event, fn) 45 | 46 | Register an `event` handler `fn`. 47 | 48 | ### Emitter#once(event, fn) 49 | 50 | Register a single-shot `event` handler `fn`, 51 | removed immediately after it is invoked the 52 | first time. 53 | 54 | ### Emitter#off(event, fn) 55 | 56 | * Pass `event` and `fn` to remove a listener. 57 | * Pass `event` to remove all listeners on that event. 58 | * Pass nothing to remove all listeners on all events. 59 | 60 | ### Emitter#emit(event, ...) 61 | 62 | Emit an `event` with variable option args. 63 | 64 | ### Emitter#listeners(event) 65 | 66 | Return an array of callbacks, or an empty array. 67 | 68 | ### Emitter#hasListeners(event) 69 | 70 | Check if this emitter has `event` handlers. 71 | 72 | ## License 73 | 74 | MIT 75 | -------------------------------------------------------------------------------- /javascript/node_modules/component-emitter/index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Expose `Emitter`. 4 | */ 5 | 6 | if (typeof module !== 'undefined') { 7 | module.exports = Emitter; 8 | } 9 | 10 | /** 11 | * Initialize a new `Emitter`. 12 | * 13 | * @api public 14 | */ 15 | 16 | function Emitter(obj) { 17 | if (obj) return mixin(obj); 18 | }; 19 | 20 | /** 21 | * Mixin the emitter properties. 22 | * 23 | * @param {Object} obj 24 | * @return {Object} 25 | * @api private 26 | */ 27 | 28 | function mixin(obj) { 29 | for (var key in Emitter.prototype) { 30 | obj[key] = Emitter.prototype[key]; 31 | } 32 | return obj; 33 | } 34 | 35 | /** 36 | * Listen on the given `event` with `fn`. 37 | * 38 | * @param {String} event 39 | * @param {Function} fn 40 | * @return {Emitter} 41 | * @api public 42 | */ 43 | 44 | Emitter.prototype.on = 45 | Emitter.prototype.addEventListener = function(event, fn){ 46 | this._callbacks = this._callbacks || {}; 47 | (this._callbacks['$' + event] = this._callbacks['$' + event] || []) 48 | .push(fn); 49 | return this; 50 | }; 51 | 52 | /** 53 | * Adds an `event` listener that will be invoked a single 54 | * time then automatically removed. 55 | * 56 | * @param {String} event 57 | * @param {Function} fn 58 | * @return {Emitter} 59 | * @api public 60 | */ 61 | 62 | Emitter.prototype.once = function(event, fn){ 63 | function on() { 64 | this.off(event, on); 65 | fn.apply(this, arguments); 66 | } 67 | 68 | on.fn = fn; 69 | this.on(event, on); 70 | return this; 71 | }; 72 | 73 | /** 74 | * Remove the given callback for `event` or all 75 | * registered callbacks. 76 | * 77 | * @param {String} event 78 | * @param {Function} fn 79 | * @return {Emitter} 80 | * @api public 81 | */ 82 | 83 | Emitter.prototype.off = 84 | Emitter.prototype.removeListener = 85 | Emitter.prototype.removeAllListeners = 86 | Emitter.prototype.removeEventListener = function(event, fn){ 87 | this._callbacks = this._callbacks || {}; 88 | 89 | // all 90 | if (0 == arguments.length) { 91 | this._callbacks = {}; 92 | return this; 93 | } 94 | 95 | // specific event 96 | var callbacks = this._callbacks['$' + event]; 97 | if (!callbacks) return this; 98 | 99 | // remove all handlers 100 | if (1 == arguments.length) { 101 | delete this._callbacks['$' + event]; 102 | return this; 103 | } 104 | 105 | // remove specific handler 106 | var cb; 107 | for (var i = 0; i < callbacks.length; i++) { 108 | cb = callbacks[i]; 109 | if (cb === fn || cb.fn === fn) { 110 | callbacks.splice(i, 1); 111 | break; 112 | } 113 | } 114 | 115 | // Remove event specific arrays for event types that no 116 | // one is subscribed for to avoid memory leak. 117 | if (callbacks.length === 0) { 118 | delete this._callbacks['$' + event]; 119 | } 120 | 121 | return this; 122 | }; 123 | 124 | /** 125 | * Emit `event` with the given args. 126 | * 127 | * @param {String} event 128 | * @param {Mixed} ... 129 | * @return {Emitter} 130 | */ 131 | 132 | Emitter.prototype.emit = function(event){ 133 | this._callbacks = this._callbacks || {}; 134 | 135 | var args = new Array(arguments.length - 1) 136 | , callbacks = this._callbacks['$' + event]; 137 | 138 | for (var i = 1; i < arguments.length; i++) { 139 | args[i - 1] = arguments[i]; 140 | } 141 | 142 | if (callbacks) { 143 | callbacks = callbacks.slice(0); 144 | for (var i = 0, len = callbacks.length; i < len; ++i) { 145 | callbacks[i].apply(this, args); 146 | } 147 | } 148 | 149 | return this; 150 | }; 151 | 152 | /** 153 | * Return array of callbacks for `event`. 154 | * 155 | * @param {String} event 156 | * @return {Array} 157 | * @api public 158 | */ 159 | 160 | Emitter.prototype.listeners = function(event){ 161 | this._callbacks = this._callbacks || {}; 162 | return this._callbacks['$' + event] || []; 163 | }; 164 | 165 | /** 166 | * Check if this emitter has `event` handlers. 167 | * 168 | * @param {String} event 169 | * @return {Boolean} 170 | * @api public 171 | */ 172 | 173 | Emitter.prototype.hasListeners = function(event){ 174 | return !! this.listeners(event).length; 175 | }; 176 | -------------------------------------------------------------------------------- /javascript/node_modules/component-emitter/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "component-emitter@~1.3.0", 3 | "_id": "component-emitter@1.3.0", 4 | "_inBundle": false, 5 | "_integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", 6 | "_location": "/component-emitter", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "component-emitter@~1.3.0", 12 | "name": "component-emitter", 13 | "escapedName": "component-emitter", 14 | "rawSpec": "~1.3.0", 15 | "saveSpec": null, 16 | "fetchSpec": "~1.3.0" 17 | }, 18 | "_requiredBy": [ 19 | "/engine.io-client", 20 | "/socket.io-client", 21 | "/socket.io-parser" 22 | ], 23 | "_resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", 24 | "_shasum": "16e4070fba8ae29b679f2215853ee181ab2eabc0", 25 | "_spec": "component-emitter@~1.3.0", 26 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/socket.io-client", 27 | "bugs": { 28 | "url": "https://github.com/component/emitter/issues" 29 | }, 30 | "bundleDependencies": false, 31 | "component": { 32 | "scripts": { 33 | "emitter/index.js": "index.js" 34 | } 35 | }, 36 | "deprecated": false, 37 | "description": "Event emitter", 38 | "devDependencies": { 39 | "mocha": "*", 40 | "should": "*" 41 | }, 42 | "files": [ 43 | "index.js", 44 | "LICENSE" 45 | ], 46 | "homepage": "https://github.com/component/emitter#readme", 47 | "license": "MIT", 48 | "main": "index.js", 49 | "name": "component-emitter", 50 | "repository": { 51 | "type": "git", 52 | "url": "git+https://github.com/component/emitter.git" 53 | }, 54 | "scripts": { 55 | "test": "make test" 56 | }, 57 | "version": "1.3.0" 58 | } 59 | -------------------------------------------------------------------------------- /javascript/node_modules/debug/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014 TJ Holowaychuk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software 6 | and associated documentation files (the 'Software'), to deal in the Software without restriction, 7 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 9 | subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all copies or substantial 12 | portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 15 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 16 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 17 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 18 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | -------------------------------------------------------------------------------- /javascript/node_modules/debug/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "debug@~4.3.1", 3 | "_id": "debug@4.3.1", 4 | "_inBundle": false, 5 | "_integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 6 | "_location": "/debug", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "debug@~4.3.1", 12 | "name": "debug", 13 | "escapedName": "debug", 14 | "rawSpec": "~4.3.1", 15 | "saveSpec": null, 16 | "fetchSpec": "~4.3.1" 17 | }, 18 | "_requiredBy": [ 19 | "/engine.io-client", 20 | "/socket.io-client", 21 | "/socket.io-parser" 22 | ], 23 | "_resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 24 | "_shasum": "f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee", 25 | "_spec": "debug@~4.3.1", 26 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/socket.io-client", 27 | "author": { 28 | "name": "TJ Holowaychuk", 29 | "email": "tj@vision-media.ca" 30 | }, 31 | "browser": "./src/browser.js", 32 | "bugs": { 33 | "url": "https://github.com/visionmedia/debug/issues" 34 | }, 35 | "bundleDependencies": false, 36 | "contributors": [ 37 | { 38 | "name": "Nathan Rajlich", 39 | "email": "nathan@tootallnate.net", 40 | "url": "http://n8.io" 41 | }, 42 | { 43 | "name": "Andrew Rhyne", 44 | "email": "rhyneandrew@gmail.com" 45 | }, 46 | { 47 | "name": "Josh Junon", 48 | "email": "josh@junon.me" 49 | } 50 | ], 51 | "dependencies": { 52 | "ms": "2.1.2" 53 | }, 54 | "deprecated": false, 55 | "description": "small debugging utility", 56 | "devDependencies": { 57 | "brfs": "^2.0.1", 58 | "browserify": "^16.2.3", 59 | "coveralls": "^3.0.2", 60 | "istanbul": "^0.4.5", 61 | "karma": "^3.1.4", 62 | "karma-browserify": "^6.0.0", 63 | "karma-chrome-launcher": "^2.2.0", 64 | "karma-mocha": "^1.3.0", 65 | "mocha": "^5.2.0", 66 | "mocha-lcov-reporter": "^1.2.0", 67 | "xo": "^0.23.0" 68 | }, 69 | "engines": { 70 | "node": ">=6.0" 71 | }, 72 | "files": [ 73 | "src", 74 | "LICENSE", 75 | "README.md" 76 | ], 77 | "homepage": "https://github.com/visionmedia/debug#readme", 78 | "keywords": [ 79 | "debug", 80 | "log", 81 | "debugger" 82 | ], 83 | "license": "MIT", 84 | "main": "./src/index.js", 85 | "name": "debug", 86 | "peerDependenciesMeta": { 87 | "supports-color": { 88 | "optional": true 89 | } 90 | }, 91 | "repository": { 92 | "type": "git", 93 | "url": "git://github.com/visionmedia/debug.git" 94 | }, 95 | "scripts": { 96 | "lint": "xo", 97 | "test": "npm run test:node && npm run test:browser && npm run lint", 98 | "test:browser": "karma start --single-run", 99 | "test:coverage": "cat ./coverage/lcov.info | coveralls", 100 | "test:node": "istanbul cover _mocha -- test.js" 101 | }, 102 | "version": "4.3.1" 103 | } 104 | -------------------------------------------------------------------------------- /javascript/node_modules/debug/src/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Detect Electron renderer / nwjs process, which is node, but we should 3 | * treat as a browser. 4 | */ 5 | 6 | if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { 7 | module.exports = require('./browser.js'); 8 | } else { 9 | module.exports = require('./node.js'); 10 | } 11 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-client/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014-2015 Automattic 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-client/lib/globalThis.browser.js: -------------------------------------------------------------------------------- 1 | module.exports = (() => { 2 | if (typeof self !== "undefined") { 3 | return self; 4 | } else if (typeof window !== "undefined") { 5 | return window; 6 | } else { 7 | return Function("return this")(); 8 | } 9 | })(); 10 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-client/lib/globalThis.js: -------------------------------------------------------------------------------- 1 | module.exports = global; 2 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-client/lib/index.js: -------------------------------------------------------------------------------- 1 | const Socket = require("./socket"); 2 | 3 | module.exports = (uri, opts) => new Socket(uri, opts); 4 | 5 | /** 6 | * Expose deps for legacy compatibility 7 | * and standalone browser access. 8 | */ 9 | 10 | module.exports.Socket = Socket; 11 | module.exports.protocol = Socket.protocol; // this is an int 12 | module.exports.Transport = require("./transport"); 13 | module.exports.transports = require("./transports/index"); 14 | module.exports.parser = require("engine.io-parser"); 15 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-client/lib/transport.js: -------------------------------------------------------------------------------- 1 | const parser = require("engine.io-parser"); 2 | const Emitter = require("component-emitter"); 3 | 4 | class Transport extends Emitter { 5 | /** 6 | * Transport abstract constructor. 7 | * 8 | * @param {Object} options. 9 | * @api private 10 | */ 11 | constructor(opts) { 12 | super(); 13 | 14 | this.opts = opts; 15 | this.query = opts.query; 16 | this.readyState = ""; 17 | this.socket = opts.socket; 18 | } 19 | 20 | /** 21 | * Emits an error. 22 | * 23 | * @param {String} str 24 | * @return {Transport} for chaining 25 | * @api public 26 | */ 27 | onError(msg, desc) { 28 | const err = new Error(msg); 29 | err.type = "TransportError"; 30 | err.description = desc; 31 | this.emit("error", err); 32 | return this; 33 | } 34 | 35 | /** 36 | * Opens the transport. 37 | * 38 | * @api public 39 | */ 40 | open() { 41 | if ("closed" === this.readyState || "" === this.readyState) { 42 | this.readyState = "opening"; 43 | this.doOpen(); 44 | } 45 | 46 | return this; 47 | } 48 | 49 | /** 50 | * Closes the transport. 51 | * 52 | * @api private 53 | */ 54 | close() { 55 | if ("opening" === this.readyState || "open" === this.readyState) { 56 | this.doClose(); 57 | this.onClose(); 58 | } 59 | 60 | return this; 61 | } 62 | 63 | /** 64 | * Sends multiple packets. 65 | * 66 | * @param {Array} packets 67 | * @api private 68 | */ 69 | send(packets) { 70 | if ("open" === this.readyState) { 71 | this.write(packets); 72 | } else { 73 | throw new Error("Transport not open"); 74 | } 75 | } 76 | 77 | /** 78 | * Called upon open 79 | * 80 | * @api private 81 | */ 82 | onOpen() { 83 | this.readyState = "open"; 84 | this.writable = true; 85 | this.emit("open"); 86 | } 87 | 88 | /** 89 | * Called with data. 90 | * 91 | * @param {String} data 92 | * @api private 93 | */ 94 | onData(data) { 95 | const packet = parser.decodePacket(data, this.socket.binaryType); 96 | this.onPacket(packet); 97 | } 98 | 99 | /** 100 | * Called with a decoded packet. 101 | */ 102 | onPacket(packet) { 103 | this.emit("packet", packet); 104 | } 105 | 106 | /** 107 | * Called upon close. 108 | * 109 | * @api private 110 | */ 111 | onClose() { 112 | this.readyState = "closed"; 113 | this.emit("close"); 114 | } 115 | } 116 | 117 | module.exports = Transport; 118 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-client/lib/transports/index.js: -------------------------------------------------------------------------------- 1 | const XMLHttpRequest = require("../../contrib/xmlhttprequest-ssl/XMLHttpRequest"); 2 | const XHR = require("./polling-xhr"); 3 | const JSONP = require("./polling-jsonp"); 4 | const websocket = require("./websocket"); 5 | 6 | exports.polling = polling; 7 | exports.websocket = websocket; 8 | 9 | /** 10 | * Polling transport polymorphic constructor. 11 | * Decides on xhr vs jsonp based on feature detection. 12 | * 13 | * @api private 14 | */ 15 | 16 | function polling(opts) { 17 | let xhr; 18 | let xd = false; 19 | let xs = false; 20 | const jsonp = false !== opts.jsonp; 21 | 22 | if (typeof location !== "undefined") { 23 | const isSSL = "https:" === location.protocol; 24 | let port = location.port; 25 | 26 | // some user agents have empty `location.port` 27 | if (!port) { 28 | port = isSSL ? 443 : 80; 29 | } 30 | 31 | xd = opts.hostname !== location.hostname || port !== opts.port; 32 | xs = opts.secure !== isSSL; 33 | } 34 | 35 | opts.xdomain = xd; 36 | opts.xscheme = xs; 37 | xhr = new XMLHttpRequest(opts); 38 | 39 | if ("open" in xhr && !opts.forceJSONP) { 40 | return new XHR(opts); 41 | } else { 42 | if (!jsonp) throw new Error("JSONP disabled"); 43 | return new JSONP(opts); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-client/lib/transports/websocket-constructor.browser.js: -------------------------------------------------------------------------------- 1 | const globalThis = require("../globalThis"); 2 | 3 | module.exports = { 4 | WebSocket: globalThis.WebSocket || globalThis.MozWebSocket, 5 | usingBrowserWebSocket: true, 6 | defaultBinaryType: "arraybuffer" 7 | }; 8 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-client/lib/transports/websocket-constructor.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | WebSocket: require("ws"), 3 | usingBrowserWebSocket: false, 4 | defaultBinaryType: "nodebuffer" 5 | }; 6 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-client/lib/util.js: -------------------------------------------------------------------------------- 1 | module.exports.pick = (obj, ...attr) => { 2 | return attr.reduce((acc, k) => { 3 | if (obj.hasOwnProperty(k)) { 4 | acc[k] = obj[k]; 5 | } 6 | return acc; 7 | }, {}); 8 | }; 9 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-client/lib/xmlhttprequest.js: -------------------------------------------------------------------------------- 1 | // browser shim for xmlhttprequest module 2 | 3 | const hasCORS = require("has-cors"); 4 | const globalThis = require("./globalThis"); 5 | 6 | module.exports = function(opts) { 7 | const xdomain = opts.xdomain; 8 | 9 | // scheme must be same when usign XDomainRequest 10 | // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx 11 | const xscheme = opts.xscheme; 12 | 13 | // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default. 14 | // https://github.com/Automattic/engine.io-client/pull/217 15 | const enablesXDR = opts.enablesXDR; 16 | 17 | // XMLHttpRequest can be disabled on IE 18 | try { 19 | if ("undefined" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) { 20 | return new XMLHttpRequest(); 21 | } 22 | } catch (e) {} 23 | 24 | // Use XDomainRequest for IE8 if enablesXDR is true 25 | // because loading bar keeps flashing when using jsonp-polling 26 | // https://github.com/yujiosaka/socke.io-ie8-loading-example 27 | try { 28 | if ("undefined" !== typeof XDomainRequest && !xscheme && enablesXDR) { 29 | return new XDomainRequest(); 30 | } 31 | } catch (e) {} 32 | 33 | if (!xdomain) { 34 | try { 35 | return new globalThis[["Active"].concat("Object").join("X")]( 36 | "Microsoft.XMLHTTP" 37 | ); 38 | } catch (e) {} 39 | } 40 | }; 41 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "engine.io-client@~5.0.0", 3 | "_id": "engine.io-client@5.0.0", 4 | "_inBundle": false, 5 | "_integrity": "sha512-e6GK0Fqvq45Nu/j7YdIVqXtDPvlsggAcfml3QiEiGdJ1qeh7IQU6knxSN3+yy9BmbnXtIfjo1hK4MFyHKdc9mQ==", 6 | "_location": "/engine.io-client", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "engine.io-client@~5.0.0", 12 | "name": "engine.io-client", 13 | "escapedName": "engine.io-client", 14 | "rawSpec": "~5.0.0", 15 | "saveSpec": null, 16 | "fetchSpec": "~5.0.0" 17 | }, 18 | "_requiredBy": [ 19 | "/socket.io-client" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-5.0.0.tgz", 22 | "_shasum": "65733887c8999d280e1dd7f241779a2c66e9559e", 23 | "_spec": "engine.io-client@~5.0.0", 24 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/socket.io-client", 25 | "browser": { 26 | "ws": false, 27 | "./contrib/xmlhttprequest-ssl/XMLHttpRequest.js": "./lib/xmlhttprequest.js", 28 | "./test/node.js": false, 29 | "./lib/transports/websocket-constructor.js": "./lib/transports/websocket-constructor.browser.js", 30 | "./lib/globalThis.js": "./lib/globalThis.browser.js" 31 | }, 32 | "bugs": { 33 | "url": "https://github.com/socketio/engine.io-client/issues" 34 | }, 35 | "bundleDependencies": false, 36 | "contributors": [ 37 | { 38 | "name": "Guillermo Rauch", 39 | "email": "rauchg@gmail.com" 40 | }, 41 | { 42 | "name": "Vladimir Dronnikov", 43 | "email": "dronnikov@gmail.com" 44 | }, 45 | { 46 | "name": "Christoph Dorn", 47 | "url": "https://github.com/cadorn" 48 | }, 49 | { 50 | "name": "Mark Mokryn", 51 | "email": "mokesmokes@gmail.com" 52 | } 53 | ], 54 | "dependencies": { 55 | "base64-arraybuffer": "0.1.4", 56 | "component-emitter": "~1.3.0", 57 | "debug": "~4.3.1", 58 | "engine.io-parser": "~4.0.1", 59 | "has-cors": "1.1.0", 60 | "parseqs": "0.0.6", 61 | "parseuri": "0.0.6", 62 | "ws": "~7.4.2", 63 | "yeast": "0.1.2" 64 | }, 65 | "deprecated": false, 66 | "description": "Client for the realtime Engine", 67 | "devDependencies": { 68 | "@babel/core": "^7.12.9", 69 | "@babel/plugin-transform-object-assign": "^7.12.1", 70 | "@babel/preset-env": "^7.12.7", 71 | "babel-eslint": "^10.1.0", 72 | "babel-loader": "^8.2.2", 73 | "blob": "0.0.5", 74 | "engine.io": "4.0.2", 75 | "eslint": "^6.8.0", 76 | "eslint-config-prettier": "^6.15.0", 77 | "expect.js": "^0.3.1", 78 | "express": "^4.17.1", 79 | "mocha": "^3.2.0", 80 | "prettier": "^1.19.1", 81 | "socket.io-browsers": "~1.0.4", 82 | "webpack": "^4.44.2", 83 | "webpack-cli": "^3.3.12", 84 | "webpack-remove-debug": "^0.1.0", 85 | "zuul": "3.11.1", 86 | "zuul-builder-webpack": "^1.2.0", 87 | "zuul-ngrok": "4.0.0" 88 | }, 89 | "files": [ 90 | "index.js", 91 | "lib/", 92 | "dist/", 93 | "contrib/" 94 | ], 95 | "homepage": "https://github.com/socketio/engine.io-client", 96 | "license": "MIT", 97 | "main": "lib/index.js", 98 | "name": "engine.io-client", 99 | "repository": { 100 | "type": "git", 101 | "url": "git+https://github.com/socketio/engine.io-client.git" 102 | }, 103 | "scripts": { 104 | "build": "webpack --config ./support/webpack.config.js --config ./support/prod.config.js", 105 | "format:check": "prettier --check 'lib/**/*.js' 'test/**/*.js' 'support/**/*.js'", 106 | "format:fix": "prettier --write 'lib/**/*.js' 'test/**/*.js' 'support/**/*.js'", 107 | "lint": "eslint lib/**/*.js test/**/*.js", 108 | "test": "npm run lint && npm run format:check && if test \"$BROWSERS\" = \"1\" ; then npm run test:browser; else npm run test:node; fi", 109 | "test:browser": "zuul test/index.js", 110 | "test:node": "mocha --reporter dot --require test/support/server.js test/index.js" 111 | }, 112 | "version": "5.0.0" 113 | } 114 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-parser/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [4.0.2](https://github.com/socketio/engine.io-parser/compare/4.0.1...4.0.2) (2020-12-07) 2 | 3 | 4 | ### Bug Fixes 5 | 6 | * add base64-arraybuffer as prod dependency ([2ccdeb2](https://github.com/socketio/engine.io-parser/commit/2ccdeb277955bed8742a29f2dcbbf57ca95eb12a)) 7 | 8 | 9 | ## [2.2.1](https://github.com/socketio/engine.io-parser/compare/2.2.0...2.2.1) (2020-09-30) 10 | 11 | 12 | ## [4.0.1](https://github.com/socketio/engine.io-parser/compare/4.0.0...4.0.1) (2020-09-10) 13 | 14 | 15 | ### Bug Fixes 16 | 17 | * use a terser-compatible representation of the separator ([886f9ea](https://github.com/socketio/engine.io-parser/commit/886f9ea7c4e717573152c31320f6fb6c6664061b)) 18 | 19 | 20 | # [4.0.0](https://github.com/socketio/engine.io-parser/compare/v4.0.0-alpha.1...4.0.0) (2020-09-08) 21 | 22 | This major release contains the necessary changes for the version 4 of the Engine.IO protocol. More information about the new version can be found [there](https://github.com/socketio/engine.io-protocol#difference-between-v3-and-v4). 23 | 24 | Encoding changes between v3 and v4: 25 | 26 | - encodePacket with string 27 | - input: `{ type: "message", data: "hello" }` 28 | - output in v3: `"4hello"` 29 | - output in v4: `"4hello"` 30 | 31 | - encodePacket with binary 32 | - input: `{ type: 'message', data: }` 33 | - output in v3: `` 34 | - output in v4: `` 35 | 36 | - encodePayload with strings 37 | - input: `[ { type: 'message', data: 'hello' }, { type: 'message', data: '€€€' } ]` 38 | - output in v3: `"6:4hello4:4€€€"` 39 | - output in v4: `"4hello\x1e4€€€"` 40 | 41 | - encodePayload with string and binary 42 | - input: `[ { type: 'message', data: 'hello' }, { type: 'message', data: } ]` 43 | - output in v3: `` 44 | - output in v4: `"4hello\x1ebAQID"` 45 | 46 | Please note that the parser is now dependency-free! This should help reduce the size of the browser bundle. 47 | 48 | ### Bug Fixes 49 | 50 | * keep track of the buffer initial length ([8edf2d1](https://github.com/socketio/engine.io-parser/commit/8edf2d1478026da442f519c2d2521af43ba01832)) 51 | 52 | 53 | ### Features 54 | 55 | * restore the upgrade mechanism ([6efedfa](https://github.com/socketio/engine.io-parser/commit/6efedfa0f3048506a4ba99e70674ddf4c0732e0c)) 56 | 57 | 58 | 59 | # [4.0.0-alpha.1](https://github.com/socketio/engine.io-parser/compare/v4.0.0-alpha.0...v4.0.0-alpha.1) (2020-05-19) 60 | 61 | 62 | ### Features 63 | 64 | * implement the version 4 of the protocol ([cab7db0](https://github.com/socketio/engine.io-parser/commit/cab7db0404e0a69f86a05ececd62c8c31f4d97d5)) 65 | 66 | 67 | 68 | # [4.0.0-alpha.0](https://github.com/socketio/engine.io-parser/compare/2.2.0...v4.0.0-alpha.0) (2020-02-04) 69 | 70 | 71 | ### Bug Fixes 72 | 73 | * properly decode binary packets ([5085373](https://github.com/socketio/engine.io-parser/commit/50853738e0c6c16f9cee0d7887651155f4b78240)) 74 | 75 | 76 | ### Features 77 | 78 | * remove packet type when encoding binary packets ([a947ae5](https://github.com/socketio/engine.io-parser/commit/a947ae59a2844e4041db58ff36b270d1528b3bee)) 79 | 80 | 81 | ### BREAKING CHANGES 82 | 83 | * the packet containing binary data will now be sent without any transformation 84 | 85 | Protocol v3: { type: 'message', data: } => 86 | Protocol v4: { type: 'message', data: } => 87 | 88 | 89 | 90 | # [2.2.0](https://github.com/socketio/engine.io-parser/compare/2.1.3...2.2.0) (2019-09-13) 91 | 92 | 93 | * [refactor] Use `Buffer.allocUnsafe` instead of `new Buffer` (#104) ([aedf8eb](https://github.com/socketio/engine.io-parser/commit/aedf8eb29e8bf6aeb5c6cc68965d986c4c958ae2)), closes [#104](https://github.com/socketio/engine.io-parser/issues/104) 94 | 95 | 96 | ### BREAKING CHANGES 97 | 98 | * drop support for Node.js 4 (since Buffer.allocUnsafe was added in v5.10.0) 99 | 100 | Reference: https://nodejs.org/docs/latest/api/buffer.html#buffer_class_method_buffer_allocunsafe_size 101 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-parser/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2016 Guillermo Rauch (@rauchg) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-parser/lib/commons.js: -------------------------------------------------------------------------------- 1 | const PACKET_TYPES = Object.create(null); // no Map = no polyfill 2 | PACKET_TYPES["open"] = "0"; 3 | PACKET_TYPES["close"] = "1"; 4 | PACKET_TYPES["ping"] = "2"; 5 | PACKET_TYPES["pong"] = "3"; 6 | PACKET_TYPES["message"] = "4"; 7 | PACKET_TYPES["upgrade"] = "5"; 8 | PACKET_TYPES["noop"] = "6"; 9 | 10 | const PACKET_TYPES_REVERSE = Object.create(null); 11 | Object.keys(PACKET_TYPES).forEach(key => { 12 | PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key; 13 | }); 14 | 15 | const ERROR_PACKET = { type: "error", data: "parser error" }; 16 | 17 | module.exports = { 18 | PACKET_TYPES, 19 | PACKET_TYPES_REVERSE, 20 | ERROR_PACKET 21 | }; 22 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-parser/lib/decodePacket.browser.js: -------------------------------------------------------------------------------- 1 | const { PACKET_TYPES_REVERSE, ERROR_PACKET } = require("./commons"); 2 | 3 | const withNativeArrayBuffer = typeof ArrayBuffer === "function"; 4 | 5 | let base64decoder; 6 | if (withNativeArrayBuffer) { 7 | base64decoder = require("base64-arraybuffer"); 8 | } 9 | 10 | const decodePacket = (encodedPacket, binaryType) => { 11 | if (typeof encodedPacket !== "string") { 12 | return { 13 | type: "message", 14 | data: mapBinary(encodedPacket, binaryType) 15 | }; 16 | } 17 | const type = encodedPacket.charAt(0); 18 | if (type === "b") { 19 | return { 20 | type: "message", 21 | data: decodeBase64Packet(encodedPacket.substring(1), binaryType) 22 | }; 23 | } 24 | const packetType = PACKET_TYPES_REVERSE[type]; 25 | if (!packetType) { 26 | return ERROR_PACKET; 27 | } 28 | return encodedPacket.length > 1 29 | ? { 30 | type: PACKET_TYPES_REVERSE[type], 31 | data: encodedPacket.substring(1) 32 | } 33 | : { 34 | type: PACKET_TYPES_REVERSE[type] 35 | }; 36 | }; 37 | 38 | const decodeBase64Packet = (data, binaryType) => { 39 | if (base64decoder) { 40 | const decoded = base64decoder.decode(data); 41 | return mapBinary(decoded, binaryType); 42 | } else { 43 | return { base64: true, data }; // fallback for old browsers 44 | } 45 | }; 46 | 47 | const mapBinary = (data, binaryType) => { 48 | switch (binaryType) { 49 | case "blob": 50 | return data instanceof ArrayBuffer ? new Blob([data]) : data; 51 | case "arraybuffer": 52 | default: 53 | return data; // assuming the data is already an ArrayBuffer 54 | } 55 | }; 56 | 57 | module.exports = decodePacket; 58 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-parser/lib/decodePacket.js: -------------------------------------------------------------------------------- 1 | const { PACKET_TYPES_REVERSE, ERROR_PACKET } = require("./commons"); 2 | 3 | const decodePacket = (encodedPacket, binaryType) => { 4 | if (typeof encodedPacket !== "string") { 5 | return { 6 | type: "message", 7 | data: mapBinary(encodedPacket, binaryType) 8 | }; 9 | } 10 | const type = encodedPacket.charAt(0); 11 | if (type === "b") { 12 | const buffer = Buffer.from(encodedPacket.substring(1), "base64"); 13 | return { 14 | type: "message", 15 | data: mapBinary(buffer, binaryType) 16 | }; 17 | } 18 | if (!PACKET_TYPES_REVERSE[type]) { 19 | return ERROR_PACKET; 20 | } 21 | return encodedPacket.length > 1 22 | ? { 23 | type: PACKET_TYPES_REVERSE[type], 24 | data: encodedPacket.substring(1) 25 | } 26 | : { 27 | type: PACKET_TYPES_REVERSE[type] 28 | }; 29 | }; 30 | 31 | const mapBinary = (data, binaryType) => { 32 | const isBuffer = Buffer.isBuffer(data); 33 | switch (binaryType) { 34 | case "arraybuffer": 35 | return isBuffer ? toArrayBuffer(data) : data; 36 | case "nodebuffer": 37 | default: 38 | return data; // assuming the data is already a Buffer 39 | } 40 | }; 41 | 42 | const toArrayBuffer = buffer => { 43 | const arrayBuffer = new ArrayBuffer(buffer.length); 44 | const view = new Uint8Array(arrayBuffer); 45 | for (let i = 0; i < buffer.length; i++) { 46 | view[i] = buffer[i]; 47 | } 48 | return arrayBuffer; 49 | }; 50 | 51 | module.exports = decodePacket; 52 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-parser/lib/encodePacket.browser.js: -------------------------------------------------------------------------------- 1 | const { PACKET_TYPES } = require("./commons"); 2 | 3 | const withNativeBlob = 4 | typeof Blob === "function" || 5 | (typeof Blob !== "undefined" && 6 | Object.prototype.toString.call(Blob) === "[object BlobConstructor]"); 7 | const withNativeArrayBuffer = typeof ArrayBuffer === "function"; 8 | 9 | // ArrayBuffer.isView method is not defined in IE10 10 | const isView = obj => { 11 | return typeof ArrayBuffer.isView === "function" 12 | ? ArrayBuffer.isView(obj) 13 | : obj && obj.buffer instanceof ArrayBuffer; 14 | }; 15 | 16 | const encodePacket = ({ type, data }, supportsBinary, callback) => { 17 | if (withNativeBlob && data instanceof Blob) { 18 | if (supportsBinary) { 19 | return callback(data); 20 | } else { 21 | return encodeBlobAsBase64(data, callback); 22 | } 23 | } else if ( 24 | withNativeArrayBuffer && 25 | (data instanceof ArrayBuffer || isView(data)) 26 | ) { 27 | if (supportsBinary) { 28 | return callback(data instanceof ArrayBuffer ? data : data.buffer); 29 | } else { 30 | return encodeBlobAsBase64(new Blob([data]), callback); 31 | } 32 | } 33 | // plain string 34 | return callback(PACKET_TYPES[type] + (data || "")); 35 | }; 36 | 37 | const encodeBlobAsBase64 = (data, callback) => { 38 | const fileReader = new FileReader(); 39 | fileReader.onload = function() { 40 | const content = fileReader.result.split(",")[1]; 41 | callback("b" + content); 42 | }; 43 | return fileReader.readAsDataURL(data); 44 | }; 45 | 46 | module.exports = encodePacket; 47 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-parser/lib/encodePacket.js: -------------------------------------------------------------------------------- 1 | const { PACKET_TYPES } = require("./commons"); 2 | 3 | const encodePacket = ({ type, data }, supportsBinary, callback) => { 4 | if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) { 5 | const buffer = toBuffer(data); 6 | return callback(encodeBuffer(buffer, supportsBinary)); 7 | } 8 | // plain string 9 | return callback(PACKET_TYPES[type] + (data || "")); 10 | }; 11 | 12 | const toBuffer = data => { 13 | if (Buffer.isBuffer(data)) { 14 | return data; 15 | } else if (data instanceof ArrayBuffer) { 16 | return Buffer.from(data); 17 | } else { 18 | return Buffer.from(data.buffer, data.byteOffset, data.byteLength); 19 | } 20 | }; 21 | 22 | // only 'message' packets can contain binary, so the type prefix is not needed 23 | const encodeBuffer = (data, supportsBinary) => { 24 | return supportsBinary ? data : "b" + data.toString("base64"); 25 | }; 26 | 27 | module.exports = encodePacket; 28 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-parser/lib/index.js: -------------------------------------------------------------------------------- 1 | const encodePacket = require("./encodePacket"); 2 | const decodePacket = require("./decodePacket"); 3 | 4 | const SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text 5 | 6 | const encodePayload = (packets, callback) => { 7 | // some packets may be added to the array while encoding, so the initial length must be saved 8 | const length = packets.length; 9 | const encodedPackets = new Array(length); 10 | let count = 0; 11 | 12 | packets.forEach((packet, i) => { 13 | // force base64 encoding for binary packets 14 | encodePacket(packet, false, encodedPacket => { 15 | encodedPackets[i] = encodedPacket; 16 | if (++count === length) { 17 | callback(encodedPackets.join(SEPARATOR)); 18 | } 19 | }); 20 | }); 21 | }; 22 | 23 | const decodePayload = (encodedPayload, binaryType) => { 24 | const encodedPackets = encodedPayload.split(SEPARATOR); 25 | const packets = []; 26 | for (let i = 0; i < encodedPackets.length; i++) { 27 | const decodedPacket = decodePacket(encodedPackets[i], binaryType); 28 | packets.push(decodedPacket); 29 | if (decodedPacket.type === "error") { 30 | break; 31 | } 32 | } 33 | return packets; 34 | }; 35 | 36 | module.exports = { 37 | protocol: 4, 38 | encodePacket, 39 | encodePayload, 40 | decodePacket, 41 | decodePayload 42 | }; 43 | -------------------------------------------------------------------------------- /javascript/node_modules/engine.io-parser/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "engine.io-parser@~4.0.1", 3 | "_id": "engine.io-parser@4.0.2", 4 | "_inBundle": false, 5 | "_integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", 6 | "_location": "/engine.io-parser", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "engine.io-parser@~4.0.1", 12 | "name": "engine.io-parser", 13 | "escapedName": "engine.io-parser", 14 | "rawSpec": "~4.0.1", 15 | "saveSpec": null, 16 | "fetchSpec": "~4.0.1" 17 | }, 18 | "_requiredBy": [ 19 | "/engine.io-client" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", 22 | "_shasum": "e41d0b3fb66f7bf4a3671d2038a154024edb501e", 23 | "_spec": "engine.io-parser@~4.0.1", 24 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/engine.io-client", 25 | "browser": { 26 | "./lib/encodePacket.js": "./lib/encodePacket.browser.js", 27 | "./lib/decodePacket.js": "./lib/decodePacket.browser.js" 28 | }, 29 | "bugs": { 30 | "url": "https://github.com/socketio/engine.io-parser/issues" 31 | }, 32 | "bundleDependencies": false, 33 | "dependencies": { 34 | "base64-arraybuffer": "0.1.4" 35 | }, 36 | "deprecated": false, 37 | "description": "Parser for the client for the realtime Engine", 38 | "devDependencies": { 39 | "@babel/core": "~7.9.6", 40 | "@babel/preset-env": "~7.9.6", 41 | "babel-eslint": "^10.0.3", 42 | "babelify": "^10.0.0", 43 | "benchmark": "^2.1.4", 44 | "eslint": "^6.8.0", 45 | "eslint-config-prettier": "^6.9.0", 46 | "expect.js": "0.3.1", 47 | "mocha": "^5.2.0", 48 | "nyc": "~15.0.1", 49 | "prettier": "^1.19.1", 50 | "socket.io-browsers": "^1.0.4", 51 | "zuul": "3.11.1", 52 | "zuul-ngrok": "4.0.0" 53 | }, 54 | "engines": { 55 | "node": ">=8.0.0" 56 | }, 57 | "files": [ 58 | "lib/" 59 | ], 60 | "homepage": "https://github.com/socketio/engine.io-parser", 61 | "license": "MIT", 62 | "main": "lib/index.js", 63 | "name": "engine.io-parser", 64 | "repository": { 65 | "type": "git", 66 | "url": "git+ssh://git@github.com/socketio/engine.io-parser.git" 67 | }, 68 | "scripts": { 69 | "format:check": "prettier --check 'lib/**/*.js' 'test/**/*.js'", 70 | "format:fix": "prettier --write 'lib/**/*.js' 'test/**/*.js'", 71 | "lint": "eslint 'lib/**/*.js' 'test/**/*.js'", 72 | "test": "npm run lint && npm run format:check && if test \"$BROWSERS\" = \"1\" ; then npm run test:browser; else npm run test:node; fi", 73 | "test:browser": "zuul test/index.js --no-coverage", 74 | "test:node": "nyc mocha test/index.js" 75 | }, 76 | "version": "4.0.2" 77 | } 78 | -------------------------------------------------------------------------------- /javascript/node_modules/has-cors/.npmignore: -------------------------------------------------------------------------------- 1 | components 2 | build 3 | node_modules 4 | -------------------------------------------------------------------------------- /javascript/node_modules/has-cors/History.md: -------------------------------------------------------------------------------- 1 | 2 | 1.1.0 / 2014-11-12 3 | ================== 4 | 5 | * remove "global" module dependency (#2, @achingbrain) 6 | 7 | 1.0.2 / 2013-08-27 8 | ================== 9 | 10 | * explicitly use `global` instead of being implicit 11 | * pin "component/global" to v2.0.1 12 | 13 | 1.0.1 / 2013-08-23 14 | ================== 15 | 16 | * package: add "component" section 17 | 18 | 1.0.0 / 2013-08-22 19 | ================== 20 | 21 | * Initial release 22 | -------------------------------------------------------------------------------- /javascript/node_modules/has-cors/Makefile: -------------------------------------------------------------------------------- 1 | 2 | build: components index.js 3 | @component build --dev 4 | 5 | components: component.json 6 | @component install --dev 7 | 8 | clean: 9 | rm -fr build components template.js 10 | 11 | .PHONY: clean 12 | -------------------------------------------------------------------------------- /javascript/node_modules/has-cors/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | # has-cors 3 | 4 | Detects support for Cross-Origin Resource Sharing 5 | 6 | ## Installation 7 | 8 | Install with [component(1)](http://component.io): 9 | 10 | $ component install component/has-cors 11 | 12 | ## API 13 | 14 | Exports `true` if the user-agent supports CORS, or `false` otherwise. 15 | 16 | ``` js 17 | var hasCORS = require('has-cors'); 18 | console.log(hasCORS); 19 | // true 20 | ``` 21 | 22 | ## License 23 | 24 | MIT 25 | -------------------------------------------------------------------------------- /javascript/node_modules/has-cors/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "has-cors", 3 | "repo": "component/has-cors", 4 | "description": "Detects support for Cross-Origin Resource Sharing", 5 | "version": "1.1.0", 6 | "keywords": [], 7 | "development": {}, 8 | "license": "MIT", 9 | "main": "index.js", 10 | "scripts": [ 11 | "index.js" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /javascript/node_modules/has-cors/index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module exports. 4 | * 5 | * Logic borrowed from Modernizr: 6 | * 7 | * - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js 8 | */ 9 | 10 | try { 11 | module.exports = typeof XMLHttpRequest !== 'undefined' && 12 | 'withCredentials' in new XMLHttpRequest(); 13 | } catch (err) { 14 | // if XMLHttp support is disabled in IE then it will throw 15 | // when trying to create 16 | module.exports = false; 17 | } 18 | -------------------------------------------------------------------------------- /javascript/node_modules/has-cors/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "has-cors@1.1.0", 3 | "_id": "has-cors@1.1.0", 4 | "_inBundle": false, 5 | "_integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", 6 | "_location": "/has-cors", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "has-cors@1.1.0", 12 | "name": "has-cors", 13 | "escapedName": "has-cors", 14 | "rawSpec": "1.1.0", 15 | "saveSpec": null, 16 | "fetchSpec": "1.1.0" 17 | }, 18 | "_requiredBy": [ 19 | "/engine.io-client" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 22 | "_shasum": "5e474793f7ea9843d1bb99c23eef49ff126fff39", 23 | "_spec": "has-cors@1.1.0", 24 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/engine.io-client", 25 | "author": { 26 | "name": "Nathan Rajlich", 27 | "email": "nathan@tootallnate.net", 28 | "url": "http://n8.io/" 29 | }, 30 | "bugs": { 31 | "url": "https://github.com/component/has-cors/issues" 32 | }, 33 | "bundleDependencies": false, 34 | "component": { 35 | "scripts": { 36 | "has-cors/index.js": "index.js" 37 | } 38 | }, 39 | "deprecated": false, 40 | "description": "Detects support for Cross-Origin Resource Sharing", 41 | "devDependencies": { 42 | "chai": "^1.10", 43 | "mocha": "^2.0" 44 | }, 45 | "homepage": "https://github.com/component/has-cors#readme", 46 | "keywords": [ 47 | "cors", 48 | "cross", 49 | "origin", 50 | "resource", 51 | "sharing", 52 | "domain" 53 | ], 54 | "license": "MIT", 55 | "main": "index.js", 56 | "name": "has-cors", 57 | "repository": { 58 | "type": "git", 59 | "url": "git://github.com/component/has-cors.git" 60 | }, 61 | "scripts": { 62 | "test": "mocha" 63 | }, 64 | "version": "1.1.0" 65 | } 66 | -------------------------------------------------------------------------------- /javascript/node_modules/has-cors/test.js: -------------------------------------------------------------------------------- 1 | var expect = require('chai').expect; 2 | 3 | describe('has-cors', function() { 4 | beforeEach(function() { 5 | // make sure result is not cached 6 | delete require.cache[require.resolve('./')]; 7 | }); 8 | 9 | it('should not have cors', function() { 10 | var hasCors = require('./'); 11 | 12 | expect(hasCors).to.be.false; 13 | }); 14 | 15 | it('should have cors', function() { 16 | global.XMLHttpRequest = function() { 17 | this.withCredentials = true; 18 | }; 19 | 20 | var hasCors = require('./'); 21 | 22 | expect(hasCors).to.be.true; 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /javascript/node_modules/ms/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Helpers. 3 | */ 4 | 5 | var s = 1000; 6 | var m = s * 60; 7 | var h = m * 60; 8 | var d = h * 24; 9 | var w = d * 7; 10 | var y = d * 365.25; 11 | 12 | /** 13 | * Parse or format the given `val`. 14 | * 15 | * Options: 16 | * 17 | * - `long` verbose formatting [false] 18 | * 19 | * @param {String|Number} val 20 | * @param {Object} [options] 21 | * @throws {Error} throw an error if val is not a non-empty string or a number 22 | * @return {String|Number} 23 | * @api public 24 | */ 25 | 26 | module.exports = function(val, options) { 27 | options = options || {}; 28 | var type = typeof val; 29 | if (type === 'string' && val.length > 0) { 30 | return parse(val); 31 | } else if (type === 'number' && isFinite(val)) { 32 | return options.long ? fmtLong(val) : fmtShort(val); 33 | } 34 | throw new Error( 35 | 'val is not a non-empty string or a valid number. val=' + 36 | JSON.stringify(val) 37 | ); 38 | }; 39 | 40 | /** 41 | * Parse the given `str` and return milliseconds. 42 | * 43 | * @param {String} str 44 | * @return {Number} 45 | * @api private 46 | */ 47 | 48 | function parse(str) { 49 | str = String(str); 50 | if (str.length > 100) { 51 | return; 52 | } 53 | var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( 54 | str 55 | ); 56 | if (!match) { 57 | return; 58 | } 59 | var n = parseFloat(match[1]); 60 | var type = (match[2] || 'ms').toLowerCase(); 61 | switch (type) { 62 | case 'years': 63 | case 'year': 64 | case 'yrs': 65 | case 'yr': 66 | case 'y': 67 | return n * y; 68 | case 'weeks': 69 | case 'week': 70 | case 'w': 71 | return n * w; 72 | case 'days': 73 | case 'day': 74 | case 'd': 75 | return n * d; 76 | case 'hours': 77 | case 'hour': 78 | case 'hrs': 79 | case 'hr': 80 | case 'h': 81 | return n * h; 82 | case 'minutes': 83 | case 'minute': 84 | case 'mins': 85 | case 'min': 86 | case 'm': 87 | return n * m; 88 | case 'seconds': 89 | case 'second': 90 | case 'secs': 91 | case 'sec': 92 | case 's': 93 | return n * s; 94 | case 'milliseconds': 95 | case 'millisecond': 96 | case 'msecs': 97 | case 'msec': 98 | case 'ms': 99 | return n; 100 | default: 101 | return undefined; 102 | } 103 | } 104 | 105 | /** 106 | * Short format for `ms`. 107 | * 108 | * @param {Number} ms 109 | * @return {String} 110 | * @api private 111 | */ 112 | 113 | function fmtShort(ms) { 114 | var msAbs = Math.abs(ms); 115 | if (msAbs >= d) { 116 | return Math.round(ms / d) + 'd'; 117 | } 118 | if (msAbs >= h) { 119 | return Math.round(ms / h) + 'h'; 120 | } 121 | if (msAbs >= m) { 122 | return Math.round(ms / m) + 'm'; 123 | } 124 | if (msAbs >= s) { 125 | return Math.round(ms / s) + 's'; 126 | } 127 | return ms + 'ms'; 128 | } 129 | 130 | /** 131 | * Long format for `ms`. 132 | * 133 | * @param {Number} ms 134 | * @return {String} 135 | * @api private 136 | */ 137 | 138 | function fmtLong(ms) { 139 | var msAbs = Math.abs(ms); 140 | if (msAbs >= d) { 141 | return plural(ms, msAbs, d, 'day'); 142 | } 143 | if (msAbs >= h) { 144 | return plural(ms, msAbs, h, 'hour'); 145 | } 146 | if (msAbs >= m) { 147 | return plural(ms, msAbs, m, 'minute'); 148 | } 149 | if (msAbs >= s) { 150 | return plural(ms, msAbs, s, 'second'); 151 | } 152 | return ms + ' ms'; 153 | } 154 | 155 | /** 156 | * Pluralization helper. 157 | */ 158 | 159 | function plural(ms, msAbs, n, name) { 160 | var isPlural = msAbs >= n * 1.5; 161 | return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); 162 | } 163 | -------------------------------------------------------------------------------- /javascript/node_modules/ms/license.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Zeit, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /javascript/node_modules/ms/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "ms@2.1.2", 3 | "_id": "ms@2.1.2", 4 | "_inBundle": false, 5 | "_integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 6 | "_location": "/ms", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "ms@2.1.2", 12 | "name": "ms", 13 | "escapedName": "ms", 14 | "rawSpec": "2.1.2", 15 | "saveSpec": null, 16 | "fetchSpec": "2.1.2" 17 | }, 18 | "_requiredBy": [ 19 | "/debug" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 22 | "_shasum": "d09d1f357b443f493382a8eb3ccd183872ae6009", 23 | "_spec": "ms@2.1.2", 24 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/debug", 25 | "bugs": { 26 | "url": "https://github.com/zeit/ms/issues" 27 | }, 28 | "bundleDependencies": false, 29 | "deprecated": false, 30 | "description": "Tiny millisecond conversion utility", 31 | "devDependencies": { 32 | "eslint": "4.12.1", 33 | "expect.js": "0.3.1", 34 | "husky": "0.14.3", 35 | "lint-staged": "5.0.0", 36 | "mocha": "4.0.1" 37 | }, 38 | "eslintConfig": { 39 | "extends": "eslint:recommended", 40 | "env": { 41 | "node": true, 42 | "es6": true 43 | } 44 | }, 45 | "files": [ 46 | "index.js" 47 | ], 48 | "homepage": "https://github.com/zeit/ms#readme", 49 | "license": "MIT", 50 | "lint-staged": { 51 | "*.js": [ 52 | "npm run lint", 53 | "prettier --single-quote --write", 54 | "git add" 55 | ] 56 | }, 57 | "main": "./index", 58 | "name": "ms", 59 | "repository": { 60 | "type": "git", 61 | "url": "git+https://github.com/zeit/ms.git" 62 | }, 63 | "scripts": { 64 | "lint": "eslint lib/* bin/*", 65 | "precommit": "lint-staged", 66 | "test": "mocha tests.js" 67 | }, 68 | "version": "2.1.2" 69 | } 70 | -------------------------------------------------------------------------------- /javascript/node_modules/ms/readme.md: -------------------------------------------------------------------------------- 1 | # ms 2 | 3 | [![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) 4 | [![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/zeit) 5 | 6 | Use this package to easily convert various time formats to milliseconds. 7 | 8 | ## Examples 9 | 10 | ```js 11 | ms('2 days') // 172800000 12 | ms('1d') // 86400000 13 | ms('10h') // 36000000 14 | ms('2.5 hrs') // 9000000 15 | ms('2h') // 7200000 16 | ms('1m') // 60000 17 | ms('5s') // 5000 18 | ms('1y') // 31557600000 19 | ms('100') // 100 20 | ms('-3 days') // -259200000 21 | ms('-1h') // -3600000 22 | ms('-200') // -200 23 | ``` 24 | 25 | ### Convert from Milliseconds 26 | 27 | ```js 28 | ms(60000) // "1m" 29 | ms(2 * 60000) // "2m" 30 | ms(-3 * 60000) // "-3m" 31 | ms(ms('10 hours')) // "10h" 32 | ``` 33 | 34 | ### Time Format Written-Out 35 | 36 | ```js 37 | ms(60000, { long: true }) // "1 minute" 38 | ms(2 * 60000, { long: true }) // "2 minutes" 39 | ms(-3 * 60000, { long: true }) // "-3 minutes" 40 | ms(ms('10 hours'), { long: true }) // "10 hours" 41 | ``` 42 | 43 | ## Features 44 | 45 | - Works both in [Node.js](https://nodejs.org) and in the browser 46 | - If a number is supplied to `ms`, a string with a unit is returned 47 | - If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) 48 | - If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned 49 | 50 | ## Related Packages 51 | 52 | - [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. 53 | 54 | ## Caught a Bug? 55 | 56 | 1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device 57 | 2. Link the package to the global module directory: `npm link` 58 | 3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! 59 | 60 | As always, you can run the tests using: `npm test` 61 | -------------------------------------------------------------------------------- /javascript/node_modules/parseqs/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Gal Koren 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /javascript/node_modules/parseqs/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha test.js 4 | -------------------------------------------------------------------------------- /javascript/node_modules/parseqs/README.md: -------------------------------------------------------------------------------- 1 | Provides methods for converting an object into string representation, and vice versa. 2 | -------------------------------------------------------------------------------- /javascript/node_modules/parseqs/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Compiles a querystring 3 | * Returns string representation of the object 4 | * 5 | * @param {Object} 6 | * @api private 7 | */ 8 | 9 | exports.encode = function (obj) { 10 | var str = ''; 11 | 12 | for (var i in obj) { 13 | if (obj.hasOwnProperty(i)) { 14 | if (str.length) str += '&'; 15 | str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]); 16 | } 17 | } 18 | 19 | return str; 20 | }; 21 | 22 | /** 23 | * Parses a simple querystring into an object 24 | * 25 | * @param {String} qs 26 | * @api private 27 | */ 28 | 29 | exports.decode = function(qs){ 30 | var qry = {}; 31 | var pairs = qs.split('&'); 32 | for (var i = 0, l = pairs.length; i < l; i++) { 33 | var pair = pairs[i].split('='); 34 | qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); 35 | } 36 | return qry; 37 | }; 38 | -------------------------------------------------------------------------------- /javascript/node_modules/parseqs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "parseqs@0.0.6", 3 | "_id": "parseqs@0.0.6", 4 | "_inBundle": false, 5 | "_integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", 6 | "_location": "/parseqs", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "parseqs@0.0.6", 12 | "name": "parseqs", 13 | "escapedName": "parseqs", 14 | "rawSpec": "0.0.6", 15 | "saveSpec": null, 16 | "fetchSpec": "0.0.6" 17 | }, 18 | "_requiredBy": [ 19 | "/engine.io-client" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", 22 | "_shasum": "8e4bb5a19d1cdc844a08ac974d34e273afa670d5", 23 | "_spec": "parseqs@0.0.6", 24 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/engine.io-client", 25 | "author": { 26 | "name": "Gal Koren" 27 | }, 28 | "bugs": { 29 | "url": "https://github.com/get/querystring/issues" 30 | }, 31 | "bundleDependencies": false, 32 | "deprecated": false, 33 | "description": "Provides methods for parsing a query string into an object, and vice versa.", 34 | "devDependencies": { 35 | "better-assert": "~1.0.0", 36 | "mocha": "1.17.1" 37 | }, 38 | "homepage": "https://github.com/get/querystring", 39 | "license": "MIT", 40 | "name": "parseqs", 41 | "repository": { 42 | "type": "git", 43 | "url": "git+https://github.com/get/querystring.git" 44 | }, 45 | "scripts": { 46 | "test": "make test" 47 | }, 48 | "version": "0.0.6" 49 | } 50 | -------------------------------------------------------------------------------- /javascript/node_modules/parseqs/test.js: -------------------------------------------------------------------------------- 1 | var assert = require('better-assert'); 2 | var expect = require('expect.js'); 3 | var util = require('./index.js'); 4 | 5 | describe('querystring test suite', function(){ 6 | it('should parse a querystring and return an object', function () { 7 | 8 | // Single assignment 9 | var queryObj = util.decode("foo=bar"); 10 | expect(queryObj.foo).to.be("bar"); 11 | 12 | // Multiple assignments 13 | queryObj = util.decode("france=paris&germany=berlin"); 14 | expect(queryObj.france).to.be("paris"); 15 | expect(queryObj.germany).to.be("berlin"); 16 | 17 | // Assignments containing non-alphanumeric characters 18 | queryObj = util.decode("india=new%20delhi"); 19 | expect(queryObj.india).to.be("new delhi"); 20 | }); 21 | 22 | it('should construct a query string from an object', function () { 23 | expect(util.encode({ a: 'b' })).to.be('a=b'); 24 | expect(util.encode({ a: 'b', c: 'd' })).to.be('a=b&c=d'); 25 | expect(util.encode({ a: 'b', c: 'tobi rocks' })).to.be('a=b&c=tobi%20rocks'); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /javascript/node_modules/parseuri/History.md: -------------------------------------------------------------------------------- 1 | 2 | n.n.n / 2014-02-09 3 | ================== 4 | 5 | * parseuri first commit 6 | -------------------------------------------------------------------------------- /javascript/node_modules/parseuri/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Gal Koren 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /javascript/node_modules/parseuri/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha test.js 4 | -------------------------------------------------------------------------------- /javascript/node_modules/parseuri/README.md: -------------------------------------------------------------------------------- 1 | # parseuri 2 | Module for parsing URI's in engine.io-client 3 | -------------------------------------------------------------------------------- /javascript/node_modules/parseuri/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Parses an URI 3 | * 4 | * @author Steven Levithan (MIT license) 5 | * @api private 6 | */ 7 | 8 | var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; 9 | 10 | var parts = [ 11 | 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor' 12 | ]; 13 | 14 | module.exports = function parseuri(str) { 15 | var src = str, 16 | b = str.indexOf('['), 17 | e = str.indexOf(']'); 18 | 19 | if (b != -1 && e != -1) { 20 | str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length); 21 | } 22 | 23 | var m = re.exec(str || ''), 24 | uri = {}, 25 | i = 14; 26 | 27 | while (i--) { 28 | uri[parts[i]] = m[i] || ''; 29 | } 30 | 31 | if (b != -1 && e != -1) { 32 | uri.source = src; 33 | uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':'); 34 | uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':'); 35 | uri.ipv6uri = true; 36 | } 37 | 38 | uri.pathNames = pathNames(uri, uri['path']); 39 | uri.queryKey = queryKey(uri, uri['query']); 40 | 41 | return uri; 42 | }; 43 | 44 | function pathNames(obj, path) { 45 | var regx = /\/{2,9}/g, 46 | names = path.replace(regx, "/").split("/"); 47 | 48 | if (path.substr(0, 1) == '/' || path.length === 0) { 49 | names.splice(0, 1); 50 | } 51 | if (path.substr(path.length - 1, 1) == '/') { 52 | names.splice(names.length - 1, 1); 53 | } 54 | 55 | return names; 56 | } 57 | 58 | function queryKey(uri, query) { 59 | var data = {}; 60 | 61 | query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) { 62 | if ($1) { 63 | data[$1] = $2; 64 | } 65 | }); 66 | 67 | return data; 68 | } 69 | -------------------------------------------------------------------------------- /javascript/node_modules/parseuri/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "parseuri@0.0.6", 3 | "_id": "parseuri@0.0.6", 4 | "_inBundle": false, 5 | "_integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", 6 | "_location": "/parseuri", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "parseuri@0.0.6", 12 | "name": "parseuri", 13 | "escapedName": "parseuri", 14 | "rawSpec": "0.0.6", 15 | "saveSpec": null, 16 | "fetchSpec": "0.0.6" 17 | }, 18 | "_requiredBy": [ 19 | "/engine.io-client", 20 | "/socket.io-client" 21 | ], 22 | "_resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", 23 | "_shasum": "e1496e829e3ac2ff47f39a4dd044b32823c4a25a", 24 | "_spec": "parseuri@0.0.6", 25 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/socket.io-client", 26 | "author": { 27 | "name": "Gal Koren" 28 | }, 29 | "bugs": { 30 | "url": "https://github.com/get/parseuri/issues" 31 | }, 32 | "bundleDependencies": false, 33 | "deprecated": false, 34 | "description": "Method that parses a URI and returns an array of its components", 35 | "devDependencies": { 36 | "better-assert": "~1.0.0", 37 | "expect.js": "^0.3.1", 38 | "mocha": "1.17.1" 39 | }, 40 | "homepage": "https://github.com/get/parseuri", 41 | "license": "MIT", 42 | "name": "parseuri", 43 | "repository": { 44 | "type": "git", 45 | "url": "git+https://github.com/get/parseuri.git" 46 | }, 47 | "scripts": { 48 | "test": "make test" 49 | }, 50 | "version": "0.0.6" 51 | } 52 | -------------------------------------------------------------------------------- /javascript/node_modules/parseuri/test.js: -------------------------------------------------------------------------------- 1 | var assert = require('better-assert'); 2 | var expect = require('expect.js'); 3 | var parseuri = require('./index.js'); 4 | 5 | describe('my suite', function(){ 6 | it('should parse an uri', function () { 7 | var http = parseuri('http://google.com') 8 | , https = parseuri('https://www.google.com:80') 9 | , query = parseuri('google.com:8080/foo/bar?foo=bar') 10 | , localhost = parseuri('localhost:8080') 11 | , ipv6 = parseuri('2001:0db8:85a3:0042:1000:8a2e:0370:7334') 12 | , ipv6short = parseuri('2001:db8:85a3:42:1000:8a2e:370:7334') 13 | , ipv6port = parseuri('2001:db8:85a3:42:1000:8a2e:370:7334:80') 14 | , ipv6abbrev = parseuri('2001::7334:a:80') 15 | , ipv6http = parseuri('http://[2001::7334:a]:80') 16 | , ipv6query = parseuri('http://[2001::7334:a]:80/foo/bar?foo=bar') 17 | 18 | expect(http.protocol).to.be('http'); 19 | expect(http.port).to.be(''); 20 | expect(http.host).to.be('google.com'); 21 | expect(https.protocol).to.be('https'); 22 | expect(https.port).to.be('80'); 23 | expect(https.host).to.be('www.google.com'); 24 | expect(query.port).to.be('8080'); 25 | expect(query.query).to.be('foo=bar'); 26 | expect(query.path).to.be('/foo/bar'); 27 | expect(query.relative).to.be('/foo/bar?foo=bar'); 28 | expect(query.queryKey.foo).to.be('bar'); 29 | expect(query.pathNames[0]).to.be('foo'); 30 | expect(query.pathNames[1]).to.be('bar'); 31 | expect(localhost.protocol).to.be(''); 32 | expect(localhost.host).to.be('localhost'); 33 | expect(localhost.port).to.be('8080'); 34 | expect(ipv6.protocol).to.be(''); 35 | expect(ipv6.host).to.be('2001:0db8:85a3:0042:1000:8a2e:0370:7334'); 36 | expect(ipv6.port).to.be(''); 37 | expect(ipv6short.protocol).to.be(''); 38 | expect(ipv6short.host).to.be('2001:db8:85a3:42:1000:8a2e:370:7334'); 39 | expect(ipv6short.port).to.be(''); 40 | expect(ipv6port.protocol).to.be(''); 41 | expect(ipv6port.host).to.be('2001:db8:85a3:42:1000:8a2e:370:7334'); 42 | expect(ipv6port.port).to.be('80'); 43 | expect(ipv6abbrev.protocol).to.be(''); 44 | expect(ipv6abbrev.host).to.be('2001::7334:a:80'); 45 | expect(ipv6abbrev.port).to.be(''); 46 | expect(ipv6http.protocol).to.be('http'); 47 | expect(ipv6http.port).to.be('80'); 48 | expect(ipv6http.host).to.be('2001::7334:a'); 49 | expect(ipv6query.protocol).to.be('http'); 50 | expect(ipv6query.port).to.be('80'); 51 | expect(ipv6query.host).to.be('2001::7334:a'); 52 | expect(ipv6query.relative).to.be('/foo/bar?foo=bar'); 53 | }); 54 | }); 55 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-client/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Guillermo Rauch 4 | 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-client/README.md: -------------------------------------------------------------------------------- 1 | 2 | # socket.io-client 3 | 4 | [![Build Status](https://github.com/socketio/socket.io-client/workflows/CI/badge.svg?branch=master)](https://github.com/socketio/socket.io-client/actions) 5 | [![Dependency Status](https://david-dm.org/socketio/socket.io-client.svg)](https://david-dm.org/socketio/socket.io-client) 6 | [![devDependency Status](https://david-dm.org/socketio/socket.io-client/dev-status.svg)](https://david-dm.org/socketio/socket.io-client#info=devDependencies) 7 | [![NPM version](https://badge.fury.io/js/socket.io-client.svg)](https://www.npmjs.com/package/socket.io-client) 8 | ![Downloads](http://img.shields.io/npm/dm/socket.io-client.svg?style=flat) 9 | [![](http://slack.socket.io/badge.svg?)](http://slack.socket.io) 10 | 11 | [![Sauce Test Status](https://saucelabs.com/browser-matrix/socket.svg)](https://saucelabs.com/u/socket) 12 | 13 | ## Documentation 14 | 15 | Please see the documentation [here](https://socket.io/docs/v3/client-initialization/). 16 | 17 | The source code of the website can be found [here](https://github.com/socketio/socket.io-website). Contributions are welcome! 18 | 19 | ## Debug / logging 20 | 21 | In order to see all the client debug output, run the following command on the browser console – including the desired scope – and reload your app page: 22 | 23 | ``` 24 | localStorage.debug = '*'; 25 | ``` 26 | 27 | And then, filter by the scopes you're interested in. See also: https://socket.io/docs/v3/logging-and-debugging/ 28 | 29 | ## License 30 | 31 | [MIT](/LICENSE) 32 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-client/build/index.d.ts: -------------------------------------------------------------------------------- 1 | import { ManagerOptions } from "./manager"; 2 | import { Socket, SocketOptions } from "./socket"; 3 | /** 4 | * Looks up an existing `Manager` for multiplexing. 5 | * If the user summons: 6 | * 7 | * `io('http://localhost/a');` 8 | * `io('http://localhost/b');` 9 | * 10 | * We reuse the existing instance based on same scheme/port/host, 11 | * and we initialize sockets for each namespace. 12 | * 13 | * @public 14 | */ 15 | declare function lookup(opts?: Partial): Socket; 16 | declare function lookup(uri: string, opts?: Partial): Socket; 17 | declare function lookup(uri: string | Partial, opts?: Partial): Socket; 18 | /** 19 | * Protocol version. 20 | * 21 | * @public 22 | */ 23 | export { protocol } from "socket.io-parser"; 24 | /** 25 | * Expose constructors for standalone build. 26 | * 27 | * @public 28 | */ 29 | export { Manager, ManagerOptions } from "./manager"; 30 | export { lookup as io, Socket, SocketOptions }; 31 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-client/build/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.Socket = exports.io = exports.Manager = exports.protocol = void 0; 4 | const url_1 = require("./url"); 5 | const manager_1 = require("./manager"); 6 | const socket_1 = require("./socket"); 7 | Object.defineProperty(exports, "Socket", { enumerable: true, get: function () { return socket_1.Socket; } }); 8 | const debug = require("debug")("socket.io-client"); 9 | /** 10 | * Module exports. 11 | */ 12 | module.exports = exports = lookup; 13 | /** 14 | * Managers cache. 15 | */ 16 | const cache = (exports.managers = {}); 17 | function lookup(uri, opts) { 18 | if (typeof uri === "object") { 19 | opts = uri; 20 | uri = undefined; 21 | } 22 | opts = opts || {}; 23 | const parsed = url_1.url(uri, opts.path); 24 | const source = parsed.source; 25 | const id = parsed.id; 26 | const path = parsed.path; 27 | const sameNamespace = cache[id] && path in cache[id]["nsps"]; 28 | const newConnection = opts.forceNew || 29 | opts["force new connection"] || 30 | false === opts.multiplex || 31 | sameNamespace; 32 | let io; 33 | if (newConnection) { 34 | debug("ignoring socket cache for %s", source); 35 | io = new manager_1.Manager(source, opts); 36 | } 37 | else { 38 | if (!cache[id]) { 39 | debug("new io instance for %s", source); 40 | cache[id] = new manager_1.Manager(source, opts); 41 | } 42 | io = cache[id]; 43 | } 44 | if (parsed.query && !opts.query) { 45 | opts.query = parsed.queryKey; 46 | } 47 | return io.socket(parsed.path, opts); 48 | } 49 | exports.io = lookup; 50 | /** 51 | * Protocol version. 52 | * 53 | * @public 54 | */ 55 | var socket_io_parser_1 = require("socket.io-parser"); 56 | Object.defineProperty(exports, "protocol", { enumerable: true, get: function () { return socket_io_parser_1.protocol; } }); 57 | /** 58 | * `connect`. 59 | * 60 | * @param {String} uri 61 | * @public 62 | */ 63 | exports.connect = lookup; 64 | /** 65 | * Expose constructors for standalone build. 66 | * 67 | * @public 68 | */ 69 | var manager_2 = require("./manager"); 70 | Object.defineProperty(exports, "Manager", { enumerable: true, get: function () { return manager_2.Manager; } }); 71 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-client/build/on.d.ts: -------------------------------------------------------------------------------- 1 | import type * as Emitter from "component-emitter"; 2 | import { StrictEventEmitter } from "./typed-events"; 3 | export declare function on(obj: Emitter | StrictEventEmitter, ev: string, fn: (err?: any) => any): VoidFunction; 4 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-client/build/on.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.on = void 0; 4 | function on(obj, ev, fn) { 5 | obj.on(ev, fn); 6 | return function subDestroy() { 7 | obj.off(ev, fn); 8 | }; 9 | } 10 | exports.on = on; 11 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-client/build/typed-events.d.ts: -------------------------------------------------------------------------------- 1 | import Emitter = require("component-emitter"); 2 | /** 3 | * An events map is an interface that maps event names to their value, which 4 | * represents the type of the `on` listener. 5 | */ 6 | export interface EventsMap { 7 | [event: string]: any; 8 | } 9 | /** 10 | * The default events map, used if no EventsMap is given. Using this EventsMap 11 | * is equivalent to accepting all event names, and any data. 12 | */ 13 | export interface DefaultEventsMap { 14 | [event: string]: (...args: any[]) => void; 15 | } 16 | /** 17 | * Returns a union type containing all the keys of an event map. 18 | */ 19 | export declare type EventNames = keyof Map & (string | symbol); 20 | /** The tuple type representing the parameters of an event listener */ 21 | export declare type EventParams> = Parameters; 22 | /** 23 | * The event names that are either in ReservedEvents or in UserEvents 24 | */ 25 | export declare type ReservedOrUserEventNames = EventNames | EventNames; 26 | /** 27 | * Type of a listener of a user event or a reserved event. If `Ev` is in 28 | * `ReservedEvents`, the reserved event listener is returned. 29 | */ 30 | export declare type ReservedOrUserListener> = Ev extends EventNames ? ReservedEvents[Ev] : Ev extends EventNames ? UserEvents[Ev] : never; 31 | /** 32 | * Strictly typed version of an `EventEmitter`. A `TypedEventEmitter` takes type 33 | * parameters for mappings of event names to event data types, and strictly 34 | * types method calls to the `EventEmitter` according to these event maps. 35 | * 36 | * @typeParam ListenEvents - `EventsMap` of user-defined events that can be 37 | * listened to with `on` or `once` 38 | * @typeParam EmitEvents - `EventsMap` of user-defined events that can be 39 | * emitted with `emit` 40 | * @typeParam ReservedEvents - `EventsMap` of reserved events, that can be 41 | * emitted by socket.io with `emitReserved`, and can be listened to with 42 | * `listen`. 43 | */ 44 | export declare abstract class StrictEventEmitter extends Emitter { 45 | /** 46 | * Adds the `listener` function as an event listener for `ev`. 47 | * 48 | * @param ev Name of the event 49 | * @param listener Callback function 50 | */ 51 | on>(ev: Ev, listener: ReservedOrUserListener): this; 52 | /** 53 | * Adds a one-time `listener` function as an event listener for `ev`. 54 | * 55 | * @param ev Name of the event 56 | * @param listener Callback function 57 | */ 58 | once>(ev: Ev, listener: ReservedOrUserListener): this; 59 | /** 60 | * Emits an event. 61 | * 62 | * @param ev Name of the event 63 | * @param args Values to send to listeners of this event 64 | */ 65 | emit>(ev: Ev, ...args: EventParams): this; 66 | /** 67 | * Emits a reserved event. 68 | * 69 | * This method is `protected`, so that only a class extending 70 | * `StrictEventEmitter` can emit its own reserved events. 71 | * 72 | * @param ev Reserved event name 73 | * @param args Arguments to emit along with the event 74 | */ 75 | protected emitReserved>(ev: Ev, ...args: EventParams): this; 76 | /** 77 | * Returns the listeners listening to an event. 78 | * 79 | * @param event Event name 80 | * @returns Array of listeners subscribed to `event` 81 | */ 82 | listeners>(event: Ev): ReservedOrUserListener[]; 83 | } 84 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-client/build/typed-events.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.StrictEventEmitter = void 0; 4 | const Emitter = require("component-emitter"); 5 | /** 6 | * Strictly typed version of an `EventEmitter`. A `TypedEventEmitter` takes type 7 | * parameters for mappings of event names to event data types, and strictly 8 | * types method calls to the `EventEmitter` according to these event maps. 9 | * 10 | * @typeParam ListenEvents - `EventsMap` of user-defined events that can be 11 | * listened to with `on` or `once` 12 | * @typeParam EmitEvents - `EventsMap` of user-defined events that can be 13 | * emitted with `emit` 14 | * @typeParam ReservedEvents - `EventsMap` of reserved events, that can be 15 | * emitted by socket.io with `emitReserved`, and can be listened to with 16 | * `listen`. 17 | */ 18 | class StrictEventEmitter extends Emitter { 19 | /** 20 | * Adds the `listener` function as an event listener for `ev`. 21 | * 22 | * @param ev Name of the event 23 | * @param listener Callback function 24 | */ 25 | on(ev, listener) { 26 | super.on(ev, listener); 27 | return this; 28 | } 29 | /** 30 | * Adds a one-time `listener` function as an event listener for `ev`. 31 | * 32 | * @param ev Name of the event 33 | * @param listener Callback function 34 | */ 35 | once(ev, listener) { 36 | super.once(ev, listener); 37 | return this; 38 | } 39 | /** 40 | * Emits an event. 41 | * 42 | * @param ev Name of the event 43 | * @param args Values to send to listeners of this event 44 | */ 45 | emit(ev, ...args) { 46 | super.emit(ev, ...args); 47 | return this; 48 | } 49 | /** 50 | * Emits a reserved event. 51 | * 52 | * This method is `protected`, so that only a class extending 53 | * `StrictEventEmitter` can emit its own reserved events. 54 | * 55 | * @param ev Reserved event name 56 | * @param args Arguments to emit along with the event 57 | */ 58 | emitReserved(ev, ...args) { 59 | super.emit(ev, ...args); 60 | return this; 61 | } 62 | /** 63 | * Returns the listeners listening to an event. 64 | * 65 | * @param event Event name 66 | * @returns Array of listeners subscribed to `event` 67 | */ 68 | listeners(event) { 69 | return super.listeners(event); 70 | } 71 | } 72 | exports.StrictEventEmitter = StrictEventEmitter; 73 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-client/build/url.d.ts: -------------------------------------------------------------------------------- 1 | declare type ParsedUrl = { 2 | source: string; 3 | protocol: string; 4 | authority: string; 5 | userInfo: string; 6 | user: string; 7 | password: string; 8 | host: string; 9 | port: string; 10 | relative: string; 11 | path: string; 12 | directory: string; 13 | file: string; 14 | query: string; 15 | anchor: string; 16 | pathNames: Array; 17 | queryKey: { 18 | [key: string]: string; 19 | }; 20 | id: string; 21 | href: string; 22 | }; 23 | /** 24 | * URL parser. 25 | * 26 | * @param uri - url 27 | * @param path - the request path of the connection 28 | * @param loc - An object meant to mimic window.location. 29 | * Defaults to window.location. 30 | * @public 31 | */ 32 | export declare function url(uri: string | ParsedUrl, path?: string, loc?: Location): ParsedUrl; 33 | export {}; 34 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-client/build/url.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.url = void 0; 4 | const parseuri = require("parseuri"); 5 | const debug = require("debug")("socket.io-client:url"); 6 | /** 7 | * URL parser. 8 | * 9 | * @param uri - url 10 | * @param path - the request path of the connection 11 | * @param loc - An object meant to mimic window.location. 12 | * Defaults to window.location. 13 | * @public 14 | */ 15 | function url(uri, path = "", loc) { 16 | let obj = uri; 17 | // default to window.location 18 | loc = loc || (typeof location !== "undefined" && location); 19 | if (null == uri) 20 | uri = loc.protocol + "//" + loc.host; 21 | // relative path support 22 | if (typeof uri === "string") { 23 | if ("/" === uri.charAt(0)) { 24 | if ("/" === uri.charAt(1)) { 25 | uri = loc.protocol + uri; 26 | } 27 | else { 28 | uri = loc.host + uri; 29 | } 30 | } 31 | if (!/^(https?|wss?):\/\//.test(uri)) { 32 | debug("protocol-less url %s", uri); 33 | if ("undefined" !== typeof loc) { 34 | uri = loc.protocol + "//" + uri; 35 | } 36 | else { 37 | uri = "https://" + uri; 38 | } 39 | } 40 | // parse 41 | debug("parse %s", uri); 42 | obj = parseuri(uri); 43 | } 44 | // make sure we treat `localhost:80` and `localhost` equally 45 | if (!obj.port) { 46 | if (/^(http|ws)$/.test(obj.protocol)) { 47 | obj.port = "80"; 48 | } 49 | else if (/^(http|ws)s$/.test(obj.protocol)) { 50 | obj.port = "443"; 51 | } 52 | } 53 | obj.path = obj.path || "/"; 54 | const ipv6 = obj.host.indexOf(":") !== -1; 55 | const host = ipv6 ? "[" + obj.host + "]" : obj.host; 56 | // define unique id 57 | obj.id = obj.protocol + "://" + host + ":" + obj.port + path; 58 | // define href 59 | obj.href = 60 | obj.protocol + 61 | "://" + 62 | host + 63 | (loc && loc.port === obj.port ? "" : ":" + obj.port); 64 | return obj; 65 | } 66 | exports.url = url; 67 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-client/wrapper.mjs: -------------------------------------------------------------------------------- 1 | import io from "./build/index.js"; 2 | 3 | export const Manager = io.Manager; 4 | export { io }; 5 | export default io; 6 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-parser/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [4.0.4](https://github.com/socketio/socket.io-parser/compare/4.0.3...4.0.4) (2021-01-15) 2 | 3 | 4 | ### Bug Fixes 5 | 6 | * allow integers as event names ([1c220dd](https://github.com/socketio/socket.io-parser/commit/1c220ddbf45ea4b44bc8dbf6f9ae245f672ba1b9)) 7 | 8 | 9 | ## [4.0.3](https://github.com/socketio/socket.io-parser/compare/4.0.2...4.0.3) (2021-01-05) 10 | 11 | 12 | ## [4.0.2](https://github.com/socketio/socket.io-parser/compare/4.0.1...4.0.2) (2020-11-25) 13 | 14 | 15 | ### Bug Fixes 16 | 17 | * move @types/component-emitter to dependencies ([#99](https://github.com/socketio/socket.io-parser/issues/99)) ([4efa005](https://github.com/socketio/socket.io-parser/commit/4efa005846ae15ecc7fb0a7f27141439113b1179)) 18 | 19 | 20 | ## [4.0.1](https://github.com/socketio/socket.io-parser/compare/3.4.1...4.0.1) (2020-11-05) 21 | 22 | ### Features 23 | 24 | * move binary detection back to the parser ([285e7cd](https://github.com/socketio/socket.io-parser/commit/285e7cd0d837adfc911c999e7294788681226ae1)) 25 | * add support for a payload in a CONNECT packet ([78f9fc2](https://github.com/socketio/socket.io-parser/commit/78f9fc2999b15804b02f2c22a2b4007734a26af9)) 26 | 27 | ### Bug Fixes 28 | 29 | * do not catch encoding errors ([aeae87c](https://github.com/socketio/socket.io-parser/commit/aeae87c220287197cb78370dbd86b950a7dd29eb)) 30 | * throw upon invalid payload format ([c327acb](https://github.com/socketio/socket.io-parser/commit/c327acbc3c3c2d0b2b439136cbcb56c81db173d6)) 31 | 32 | ### BREAKING CHANGES 33 | 34 | * the encode method is now synchronous ([28d4f03](https://github.com/socketio/socket.io-parser/commit/28d4f0309bdd9e306b78d1946d3e1760941d6544)) 35 | 36 | 37 | 38 | ## [4.0.1-rc3](https://github.com/socketio/socket.io-parser/compare/4.0.1-rc2...4.0.1-rc3) (2020-10-25) 39 | 40 | 41 | 42 | ## [4.0.1-rc2](https://github.com/socketio/socket.io-parser/compare/4.0.1-rc1...4.0.1-rc2) (2020-10-15) 43 | 44 | 45 | ### Features 46 | 47 | * move binary detection back to the parser ([285e7cd](https://github.com/socketio/socket.io-parser/commit/285e7cd0d837adfc911c999e7294788681226ae1)) 48 | 49 | 50 | 51 | ## [4.0.1-rc1](https://github.com/socketio/socket.io-parser/compare/4.0.0...4.0.1-rc1) (2020-10-12) 52 | 53 | 54 | ### Features 55 | 56 | * add support for a payload in a CONNECT packet ([78f9fc2](https://github.com/socketio/socket.io-parser/commit/78f9fc2999b15804b02f2c22a2b4007734a26af9)) 57 | 58 | 59 | 60 | ## [3.3.1](https://github.com/socketio/socket.io-parser/compare/3.3.0...3.3.1) (2020-09-30) 61 | 62 | 63 | # [4.0.0](https://github.com/socketio/socket.io-parser/compare/3.4.1...4.0.0) (2020-09-28) 64 | 65 | This release will be included in Socket.IO v3. 66 | 67 | There is a breaking API change (see below), but the exchange [protocol](https://github.com/socketio/socket.io-protocol) is left untouched and thus stays in version 4. 68 | 69 | ### Bug Fixes 70 | 71 | * do not catch encoding errors ([aeae87c](https://github.com/socketio/socket.io-parser/commit/aeae87c220287197cb78370dbd86b950a7dd29eb)) 72 | * throw upon invalid payload format ([c327acb](https://github.com/socketio/socket.io-parser/commit/c327acbc3c3c2d0b2b439136cbcb56c81db173d6)) 73 | 74 | 75 | ### BREAKING CHANGES 76 | 77 | * the encode method is now synchronous ([28d4f03](https://github.com/socketio/socket.io-parser/commit/28d4f0309bdd9e306b78d1946d3e1760941d6544)) 78 | 79 | 80 | 81 | ## [3.4.1](https://github.com/socketio/socket.io-parser/compare/3.4.0...3.4.1) (2020-05-13) 82 | 83 | 84 | ### Bug Fixes 85 | 86 | * prevent DoS (OOM) via massive packets ([#95](https://github.com/socketio/socket.io-parser/issues/95)) ([dcb942d](https://github.com/socketio/socket.io-parser/commit/dcb942d24db97162ad16a67c2a0cf30875342d55)) 87 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-parser/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014 Guillermo Rauch 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the 'Software'), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-parser/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | # socket.io-parser 3 | 4 | [![Build Status](https://github.com/socketio/socket.io-parser/workflows/CI/badge.svg)](https://github.com/socketio/socket.io-parser/actions) 5 | [![NPM version](https://badge.fury.io/js/socket.io-parser.svg)](http://badge.fury.io/js/socket.io-parser) 6 | 7 | A socket.io encoder and decoder written in JavaScript complying with version `5` 8 | of [socket.io-protocol](https://github.com/socketio/socket.io-protocol). 9 | Used by [socket.io](https://github.com/automattic/socket.io) and 10 | [socket.io-client](https://github.com/automattic/socket.io-client). 11 | 12 | Compatibility table: 13 | 14 | | Parser version | Socket.IO server version | Protocol revision | 15 | |----------------| ------------------------ | ----------------- | 16 | | 3.x | 1.x / 2.x | 4 | 17 | | 4.x | 3.x | 5 | 18 | 19 | 20 | ## Parser API 21 | 22 | socket.io-parser is the reference implementation of socket.io-protocol. Read 23 | the full API here: 24 | [socket.io-protocol](https://github.com/learnboost/socket.io-protocol). 25 | 26 | ## Example Usage 27 | 28 | ### Encoding and decoding a packet 29 | 30 | ```js 31 | var parser = require('socket.io-parser'); 32 | var encoder = new parser.Encoder(); 33 | var packet = { 34 | type: parser.EVENT, 35 | data: 'test-packet', 36 | id: 13 37 | }; 38 | encoder.encode(packet, function(encodedPackets) { 39 | var decoder = new parser.Decoder(); 40 | decoder.on('decoded', function(decodedPacket) { 41 | // decodedPacket.type == parser.EVENT 42 | // decodedPacket.data == 'test-packet' 43 | // decodedPacket.id == 13 44 | }); 45 | 46 | for (var i = 0; i < encodedPackets.length; i++) { 47 | decoder.add(encodedPackets[i]); 48 | } 49 | }); 50 | ``` 51 | 52 | ### Encoding and decoding a packet with binary data 53 | 54 | ```js 55 | var parser = require('socket.io-parser'); 56 | var encoder = new parser.Encoder(); 57 | var packet = { 58 | type: parser.BINARY_EVENT, 59 | data: {i: new Buffer(1234), j: new Blob([new ArrayBuffer(2)])}, 60 | id: 15 61 | }; 62 | encoder.encode(packet, function(encodedPackets) { 63 | var decoder = new parser.Decoder(); 64 | decoder.on('decoded', function(decodedPacket) { 65 | // decodedPacket.type == parser.BINARY_EVENT 66 | // Buffer.isBuffer(decodedPacket.data.i) == true 67 | // Buffer.isBuffer(decodedPacket.data.j) == true 68 | // decodedPacket.id == 15 69 | }); 70 | 71 | for (var i = 0; i < encodedPackets.length; i++) { 72 | decoder.add(encodedPackets[i]); 73 | } 74 | }); 75 | ``` 76 | See the test suite for more examples of how socket.io-parser is used. 77 | 78 | 79 | ## License 80 | 81 | MIT 82 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-parser/dist/binary.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder. 3 | * 4 | * @param {Object} packet - socket.io event packet 5 | * @return {Object} with deconstructed packet and list of buffers 6 | * @public 7 | */ 8 | export declare function deconstructPacket(packet: any): { 9 | packet: any; 10 | buffers: any[]; 11 | }; 12 | /** 13 | * Reconstructs a binary packet from its placeholder packet and buffers 14 | * 15 | * @param {Object} packet - event packet with placeholders 16 | * @param {Array} buffers - binary buffers to put in placeholder positions 17 | * @return {Object} reconstructed packet 18 | * @public 19 | */ 20 | export declare function reconstructPacket(packet: any, buffers: any): any; 21 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-parser/dist/binary.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.reconstructPacket = exports.deconstructPacket = void 0; 4 | const is_binary_1 = require("./is-binary"); 5 | /** 6 | * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder. 7 | * 8 | * @param {Object} packet - socket.io event packet 9 | * @return {Object} with deconstructed packet and list of buffers 10 | * @public 11 | */ 12 | function deconstructPacket(packet) { 13 | const buffers = []; 14 | const packetData = packet.data; 15 | const pack = packet; 16 | pack.data = _deconstructPacket(packetData, buffers); 17 | pack.attachments = buffers.length; // number of binary 'attachments' 18 | return { packet: pack, buffers: buffers }; 19 | } 20 | exports.deconstructPacket = deconstructPacket; 21 | function _deconstructPacket(data, buffers) { 22 | if (!data) 23 | return data; 24 | if (is_binary_1.isBinary(data)) { 25 | const placeholder = { _placeholder: true, num: buffers.length }; 26 | buffers.push(data); 27 | return placeholder; 28 | } 29 | else if (Array.isArray(data)) { 30 | const newData = new Array(data.length); 31 | for (let i = 0; i < data.length; i++) { 32 | newData[i] = _deconstructPacket(data[i], buffers); 33 | } 34 | return newData; 35 | } 36 | else if (typeof data === "object" && !(data instanceof Date)) { 37 | const newData = {}; 38 | for (const key in data) { 39 | if (data.hasOwnProperty(key)) { 40 | newData[key] = _deconstructPacket(data[key], buffers); 41 | } 42 | } 43 | return newData; 44 | } 45 | return data; 46 | } 47 | /** 48 | * Reconstructs a binary packet from its placeholder packet and buffers 49 | * 50 | * @param {Object} packet - event packet with placeholders 51 | * @param {Array} buffers - binary buffers to put in placeholder positions 52 | * @return {Object} reconstructed packet 53 | * @public 54 | */ 55 | function reconstructPacket(packet, buffers) { 56 | packet.data = _reconstructPacket(packet.data, buffers); 57 | packet.attachments = undefined; // no longer useful 58 | return packet; 59 | } 60 | exports.reconstructPacket = reconstructPacket; 61 | function _reconstructPacket(data, buffers) { 62 | if (!data) 63 | return data; 64 | if (data && data._placeholder) { 65 | return buffers[data.num]; // appropriate buffer (should be natural order anyway) 66 | } 67 | else if (Array.isArray(data)) { 68 | for (let i = 0; i < data.length; i++) { 69 | data[i] = _reconstructPacket(data[i], buffers); 70 | } 71 | } 72 | else if (typeof data === "object") { 73 | for (const key in data) { 74 | if (data.hasOwnProperty(key)) { 75 | data[key] = _reconstructPacket(data[key], buffers); 76 | } 77 | } 78 | } 79 | return data; 80 | } 81 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-parser/dist/index.d.ts: -------------------------------------------------------------------------------- 1 | import Emitter = require("component-emitter"); 2 | /** 3 | * Protocol version. 4 | * 5 | * @public 6 | */ 7 | export declare const protocol: number; 8 | export declare enum PacketType { 9 | CONNECT = 0, 10 | DISCONNECT = 1, 11 | EVENT = 2, 12 | ACK = 3, 13 | CONNECT_ERROR = 4, 14 | BINARY_EVENT = 5, 15 | BINARY_ACK = 6 16 | } 17 | export interface Packet { 18 | type: PacketType; 19 | nsp: string; 20 | data?: any; 21 | id?: number; 22 | attachments?: number; 23 | } 24 | /** 25 | * A socket.io Encoder instance 26 | */ 27 | export declare class Encoder { 28 | /** 29 | * Encode a packet as a single string if non-binary, or as a 30 | * buffer sequence, depending on packet type. 31 | * 32 | * @param {Object} obj - packet object 33 | */ 34 | encode(obj: Packet): any[]; 35 | /** 36 | * Encode packet as string. 37 | */ 38 | private encodeAsString; 39 | /** 40 | * Encode packet as 'buffer sequence' by removing blobs, and 41 | * deconstructing packet into object with placeholders and 42 | * a list of buffers. 43 | */ 44 | private encodeAsBinary; 45 | } 46 | /** 47 | * A socket.io Decoder instance 48 | * 49 | * @return {Object} decoder 50 | */ 51 | export declare class Decoder extends Emitter { 52 | private reconstructor; 53 | constructor(); 54 | /** 55 | * Decodes an encoded packet string into packet JSON. 56 | * 57 | * @param {String} obj - encoded packet 58 | */ 59 | add(obj: any): void; 60 | /** 61 | * Decode a packet String (JSON data) 62 | * 63 | * @param {String} str 64 | * @return {Object} packet 65 | */ 66 | private decodeString; 67 | private static isPayloadValid; 68 | /** 69 | * Deallocates a parser's resources 70 | */ 71 | destroy(): void; 72 | } 73 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-parser/dist/is-binary.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File. 3 | * 4 | * @private 5 | */ 6 | export declare function isBinary(obj: any): boolean; 7 | export declare function hasBinary(obj: any, toJSON?: boolean): any; 8 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-parser/dist/is-binary.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.hasBinary = exports.isBinary = void 0; 4 | const withNativeArrayBuffer = typeof ArrayBuffer === "function"; 5 | const isView = (obj) => { 6 | return typeof ArrayBuffer.isView === "function" 7 | ? ArrayBuffer.isView(obj) 8 | : obj.buffer instanceof ArrayBuffer; 9 | }; 10 | const toString = Object.prototype.toString; 11 | const withNativeBlob = typeof Blob === "function" || 12 | (typeof Blob !== "undefined" && 13 | toString.call(Blob) === "[object BlobConstructor]"); 14 | const withNativeFile = typeof File === "function" || 15 | (typeof File !== "undefined" && 16 | toString.call(File) === "[object FileConstructor]"); 17 | /** 18 | * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File. 19 | * 20 | * @private 21 | */ 22 | function isBinary(obj) { 23 | return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) || 24 | (withNativeBlob && obj instanceof Blob) || 25 | (withNativeFile && obj instanceof File)); 26 | } 27 | exports.isBinary = isBinary; 28 | function hasBinary(obj, toJSON) { 29 | if (!obj || typeof obj !== "object") { 30 | return false; 31 | } 32 | if (Array.isArray(obj)) { 33 | for (let i = 0, l = obj.length; i < l; i++) { 34 | if (hasBinary(obj[i])) { 35 | return true; 36 | } 37 | } 38 | return false; 39 | } 40 | if (isBinary(obj)) { 41 | return true; 42 | } 43 | if (obj.toJSON && 44 | typeof obj.toJSON === "function" && 45 | arguments.length === 1) { 46 | return hasBinary(obj.toJSON(), true); 47 | } 48 | for (const key in obj) { 49 | if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) { 50 | return true; 51 | } 52 | } 53 | return false; 54 | } 55 | exports.hasBinary = hasBinary; 56 | -------------------------------------------------------------------------------- /javascript/node_modules/socket.io-parser/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "socket.io-parser@~4.0.4", 3 | "_id": "socket.io-parser@4.0.4", 4 | "_inBundle": false, 5 | "_integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", 6 | "_location": "/socket.io-parser", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "socket.io-parser@~4.0.4", 12 | "name": "socket.io-parser", 13 | "escapedName": "socket.io-parser", 14 | "rawSpec": "~4.0.4", 15 | "saveSpec": null, 16 | "fetchSpec": "~4.0.4" 17 | }, 18 | "_requiredBy": [ 19 | "/socket.io-client" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", 22 | "_shasum": "9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0", 23 | "_spec": "socket.io-parser@~4.0.4", 24 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/socket.io-client", 25 | "bugs": { 26 | "url": "https://github.com/socketio/socket.io-parser/issues" 27 | }, 28 | "bundleDependencies": false, 29 | "dependencies": { 30 | "@types/component-emitter": "^1.2.10", 31 | "component-emitter": "~1.3.0", 32 | "debug": "~4.3.1" 33 | }, 34 | "deprecated": false, 35 | "description": "socket.io protocol parser", 36 | "devDependencies": { 37 | "@babel/core": "~7.9.6", 38 | "@babel/preset-env": "~7.9.6", 39 | "@types/debug": "^4.1.5", 40 | "@types/node": "^14.11.1", 41 | "babelify": "~10.0.0", 42 | "benchmark": "2.1.2", 43 | "expect.js": "0.3.1", 44 | "mocha": "3.2.0", 45 | "prettier": "^2.1.2", 46 | "rimraf": "^3.0.2", 47 | "socket.io-browsers": "^1.0.0", 48 | "typescript": "^4.0.3", 49 | "zuul": "3.11.1", 50 | "zuul-ngrok": "4.0.0" 51 | }, 52 | "engines": { 53 | "node": ">=10.0.0" 54 | }, 55 | "files": [ 56 | "dist/" 57 | ], 58 | "homepage": "https://github.com/socketio/socket.io-parser#readme", 59 | "license": "MIT", 60 | "main": "./dist/index.js", 61 | "name": "socket.io-parser", 62 | "repository": { 63 | "type": "git", 64 | "url": "git+https://github.com/socketio/socket.io-parser.git" 65 | }, 66 | "scripts": { 67 | "compile": "rimraf ./dist && tsc", 68 | "format:check": "prettier --check --parser typescript 'lib/**/*.ts' 'test/**/*.js'", 69 | "format:fix": "prettier --write --parser typescript 'lib/**/*.ts' 'test/**/*.js'", 70 | "prepack": "npm run compile", 71 | "test": "npm run format:check && npm run compile && if test \"$BROWSERS\" = \"1\" ; then npm run test:browser; else npm run test:node; fi", 72 | "test:browser": "zuul test/index.js --no-coverage", 73 | "test:node": "mocha --reporter dot --bail test/index.js" 74 | }, 75 | "types": "./dist/index.d.ts", 76 | "version": "4.0.4" 77 | } 78 | -------------------------------------------------------------------------------- /javascript/node_modules/ws/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011 Einar Otto Stangvik 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /javascript/node_modules/ws/browser.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function () { 4 | throw new Error( 5 | 'ws does not work in the browser. Browser clients must use the native ' + 6 | 'WebSocket object' 7 | ); 8 | }; 9 | -------------------------------------------------------------------------------- /javascript/node_modules/ws/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const WebSocket = require('./lib/websocket'); 4 | 5 | WebSocket.createWebSocketStream = require('./lib/stream'); 6 | WebSocket.Server = require('./lib/websocket-server'); 7 | WebSocket.Receiver = require('./lib/receiver'); 8 | WebSocket.Sender = require('./lib/sender'); 9 | 10 | module.exports = WebSocket; 11 | -------------------------------------------------------------------------------- /javascript/node_modules/ws/lib/buffer-util.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { EMPTY_BUFFER } = require('./constants'); 4 | 5 | /** 6 | * Merges an array of buffers into a new buffer. 7 | * 8 | * @param {Buffer[]} list The array of buffers to concat 9 | * @param {Number} totalLength The total length of buffers in the list 10 | * @return {Buffer} The resulting buffer 11 | * @public 12 | */ 13 | function concat(list, totalLength) { 14 | if (list.length === 0) return EMPTY_BUFFER; 15 | if (list.length === 1) return list[0]; 16 | 17 | const target = Buffer.allocUnsafe(totalLength); 18 | let offset = 0; 19 | 20 | for (let i = 0; i < list.length; i++) { 21 | const buf = list[i]; 22 | target.set(buf, offset); 23 | offset += buf.length; 24 | } 25 | 26 | if (offset < totalLength) return target.slice(0, offset); 27 | 28 | return target; 29 | } 30 | 31 | /** 32 | * Masks a buffer using the given mask. 33 | * 34 | * @param {Buffer} source The buffer to mask 35 | * @param {Buffer} mask The mask to use 36 | * @param {Buffer} output The buffer where to store the result 37 | * @param {Number} offset The offset at which to start writing 38 | * @param {Number} length The number of bytes to mask. 39 | * @public 40 | */ 41 | function _mask(source, mask, output, offset, length) { 42 | for (let i = 0; i < length; i++) { 43 | output[offset + i] = source[i] ^ mask[i & 3]; 44 | } 45 | } 46 | 47 | /** 48 | * Unmasks a buffer using the given mask. 49 | * 50 | * @param {Buffer} buffer The buffer to unmask 51 | * @param {Buffer} mask The mask to use 52 | * @public 53 | */ 54 | function _unmask(buffer, mask) { 55 | // Required until https://github.com/nodejs/node/issues/9006 is resolved. 56 | const length = buffer.length; 57 | for (let i = 0; i < length; i++) { 58 | buffer[i] ^= mask[i & 3]; 59 | } 60 | } 61 | 62 | /** 63 | * Converts a buffer to an `ArrayBuffer`. 64 | * 65 | * @param {Buffer} buf The buffer to convert 66 | * @return {ArrayBuffer} Converted buffer 67 | * @public 68 | */ 69 | function toArrayBuffer(buf) { 70 | if (buf.byteLength === buf.buffer.byteLength) { 71 | return buf.buffer; 72 | } 73 | 74 | return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); 75 | } 76 | 77 | /** 78 | * Converts `data` to a `Buffer`. 79 | * 80 | * @param {*} data The data to convert 81 | * @return {Buffer} The buffer 82 | * @throws {TypeError} 83 | * @public 84 | */ 85 | function toBuffer(data) { 86 | toBuffer.readOnly = true; 87 | 88 | if (Buffer.isBuffer(data)) return data; 89 | 90 | let buf; 91 | 92 | if (data instanceof ArrayBuffer) { 93 | buf = Buffer.from(data); 94 | } else if (ArrayBuffer.isView(data)) { 95 | buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength); 96 | } else { 97 | buf = Buffer.from(data); 98 | toBuffer.readOnly = false; 99 | } 100 | 101 | return buf; 102 | } 103 | 104 | try { 105 | const bufferUtil = require('bufferutil'); 106 | const bu = bufferUtil.BufferUtil || bufferUtil; 107 | 108 | module.exports = { 109 | concat, 110 | mask(source, mask, output, offset, length) { 111 | if (length < 48) _mask(source, mask, output, offset, length); 112 | else bu.mask(source, mask, output, offset, length); 113 | }, 114 | toArrayBuffer, 115 | toBuffer, 116 | unmask(buffer, mask) { 117 | if (buffer.length < 32) _unmask(buffer, mask); 118 | else bu.unmask(buffer, mask); 119 | } 120 | }; 121 | } catch (e) /* istanbul ignore next */ { 122 | module.exports = { 123 | concat, 124 | mask: _mask, 125 | toArrayBuffer, 126 | toBuffer, 127 | unmask: _unmask 128 | }; 129 | } 130 | -------------------------------------------------------------------------------- /javascript/node_modules/ws/lib/constants.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | BINARY_TYPES: ['nodebuffer', 'arraybuffer', 'fragments'], 5 | GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', 6 | kStatusCode: Symbol('status-code'), 7 | kWebSocket: Symbol('websocket'), 8 | EMPTY_BUFFER: Buffer.alloc(0), 9 | NOOP: () => {} 10 | }; 11 | -------------------------------------------------------------------------------- /javascript/node_modules/ws/lib/limiter.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const kDone = Symbol('kDone'); 4 | const kRun = Symbol('kRun'); 5 | 6 | /** 7 | * A very simple job queue with adjustable concurrency. Adapted from 8 | * https://github.com/STRML/async-limiter 9 | */ 10 | class Limiter { 11 | /** 12 | * Creates a new `Limiter`. 13 | * 14 | * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed 15 | * to run concurrently 16 | */ 17 | constructor(concurrency) { 18 | this[kDone] = () => { 19 | this.pending--; 20 | this[kRun](); 21 | }; 22 | this.concurrency = concurrency || Infinity; 23 | this.jobs = []; 24 | this.pending = 0; 25 | } 26 | 27 | /** 28 | * Adds a job to the queue. 29 | * 30 | * @param {Function} job The job to run 31 | * @public 32 | */ 33 | add(job) { 34 | this.jobs.push(job); 35 | this[kRun](); 36 | } 37 | 38 | /** 39 | * Removes a job from the queue and runs it if possible. 40 | * 41 | * @private 42 | */ 43 | [kRun]() { 44 | if (this.pending === this.concurrency) return; 45 | 46 | if (this.jobs.length) { 47 | const job = this.jobs.shift(); 48 | 49 | this.pending++; 50 | job(this[kDone]); 51 | } 52 | } 53 | } 54 | 55 | module.exports = Limiter; 56 | -------------------------------------------------------------------------------- /javascript/node_modules/ws/lib/validation.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | try { 4 | const isValidUTF8 = require('utf-8-validate'); 5 | 6 | exports.isValidUTF8 = 7 | typeof isValidUTF8 === 'object' 8 | ? isValidUTF8.Validation.isValidUTF8 // utf-8-validate@<3.0.0 9 | : isValidUTF8; 10 | } catch (e) /* istanbul ignore next */ { 11 | exports.isValidUTF8 = () => true; 12 | } 13 | 14 | /** 15 | * Checks if a status code is allowed in a close frame. 16 | * 17 | * @param {Number} code The status code 18 | * @return {Boolean} `true` if the status code is valid, else `false` 19 | * @public 20 | */ 21 | exports.isValidStatusCode = (code) => { 22 | return ( 23 | (code >= 1000 && 24 | code <= 1014 && 25 | code !== 1004 && 26 | code !== 1005 && 27 | code !== 1006) || 28 | (code >= 3000 && code <= 4999) 29 | ); 30 | }; 31 | -------------------------------------------------------------------------------- /javascript/node_modules/ws/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "ws@~7.4.2", 3 | "_id": "ws@7.4.4", 4 | "_inBundle": false, 5 | "_integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", 6 | "_location": "/ws", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "ws@~7.4.2", 12 | "name": "ws", 13 | "escapedName": "ws", 14 | "rawSpec": "~7.4.2", 15 | "saveSpec": null, 16 | "fetchSpec": "~7.4.2" 17 | }, 18 | "_requiredBy": [ 19 | "/engine.io-client" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", 22 | "_shasum": "383bc9742cb202292c9077ceab6f6047b17f2d59", 23 | "_spec": "ws@~7.4.2", 24 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/engine.io-client", 25 | "author": { 26 | "name": "Einar Otto Stangvik", 27 | "email": "einaros@gmail.com", 28 | "url": "http://2x.io" 29 | }, 30 | "browser": "browser.js", 31 | "bugs": { 32 | "url": "https://github.com/websockets/ws/issues" 33 | }, 34 | "bundleDependencies": false, 35 | "deprecated": false, 36 | "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js", 37 | "devDependencies": { 38 | "benchmark": "^2.1.4", 39 | "bufferutil": "^4.0.1", 40 | "eslint": "^7.2.0", 41 | "eslint-config-prettier": "^8.1.0", 42 | "eslint-plugin-prettier": "^3.0.1", 43 | "mocha": "^7.0.0", 44 | "nyc": "^15.0.0", 45 | "prettier": "^2.0.5", 46 | "utf-8-validate": "^5.0.2" 47 | }, 48 | "engines": { 49 | "node": ">=8.3.0" 50 | }, 51 | "files": [ 52 | "browser.js", 53 | "index.js", 54 | "lib/*.js" 55 | ], 56 | "homepage": "https://github.com/websockets/ws", 57 | "keywords": [ 58 | "HyBi", 59 | "Push", 60 | "RFC-6455", 61 | "WebSocket", 62 | "WebSockets", 63 | "real-time" 64 | ], 65 | "license": "MIT", 66 | "main": "index.js", 67 | "name": "ws", 68 | "peerDependencies": { 69 | "bufferutil": "^4.0.1", 70 | "utf-8-validate": "^5.0.2" 71 | }, 72 | "peerDependenciesMeta": { 73 | "bufferutil": { 74 | "optional": true 75 | }, 76 | "utf-8-validate": { 77 | "optional": true 78 | } 79 | }, 80 | "repository": { 81 | "type": "git", 82 | "url": "git+https://github.com/websockets/ws.git" 83 | }, 84 | "scripts": { 85 | "integration": "mocha --throw-deprecation test/*.integration.js", 86 | "lint": "eslint --ignore-path .gitignore . && prettier --check --ignore-path .gitignore \"**/*.{json,md,yaml,yml}\"", 87 | "test": "nyc --reporter=lcov --reporter=text mocha --throw-deprecation test/*.test.js" 88 | }, 89 | "version": "7.4.4" 90 | } 91 | -------------------------------------------------------------------------------- /javascript/node_modules/yeast/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /javascript/node_modules/yeast/README.md: -------------------------------------------------------------------------------- 1 | # yeast 2 | 3 | [![Made by unshift](https://img.shields.io/badge/made%20by-unshift-00ffcc.svg?style=flat-square)](http://unshift.io)[![Version npm](https://img.shields.io/npm/v/yeast.svg?style=flat-square)](http://browsenpm.org/package/yeast)[![Build Status](https://img.shields.io/travis/unshiftio/yeast/master.svg?style=flat-square)](https://travis-ci.org/unshiftio/yeast)[![Dependencies](https://img.shields.io/david/unshiftio/yeast.svg?style=flat-square)](https://david-dm.org/unshiftio/yeast)[![Coverage Status](https://img.shields.io/coveralls/unshiftio/yeast/master.svg?style=flat-square)](https://coveralls.io/r/unshiftio/yeast?branch=master)[![IRC channel](https://img.shields.io/badge/IRC-irc.freenode.net%23unshift-00a8ff.svg?style=flat-square)](https://webchat.freenode.net/?channels=unshift) 4 | 5 | [![Sauce Test Status](https://saucelabs.com/browser-matrix/yeast.svg)](https://saucelabs.com/u/yeast) 6 | 7 | Yeast is a unique id generator. It has been primarily designed to generate a 8 | unique id which can be used for cache busting. A common practice for this is 9 | to use a timestamp, but there are couple of downsides when using timestamps. 10 | 11 | 1. The timestamp is already 13 chars long. This might not matter for 1 request 12 | but if you make hundreds of them this quickly adds up in bandwidth and 13 | processing time. 14 | 2. It's not unique enough. If you generate two stamps right after each other, 15 | they would be identical because the timing accuracy is limited to 16 | milliseconds. 17 | 18 | Yeast solves both of these issues by: 19 | 20 | 1. Compressing the generated timestamp using a custom `encode()` function that 21 | returns a string representation of the number. 22 | 2. Seeding the id in case of collision (when the id is identical to the previous 23 | one). 24 | 25 | To keep the strings unique it will use the `.` char to separate the generated 26 | stamp from the seed. 27 | 28 | ## Installation 29 | 30 | The module is intended to be used in browsers as well as in Node.js and is 31 | therefore released in the npm registry and can be installed using: 32 | 33 | ``` 34 | npm install --save yeast 35 | ``` 36 | 37 | ## Usage 38 | 39 | All the examples assume that this library is initialized as follow: 40 | 41 | ```js 42 | 'use strict'; 43 | 44 | var yeast = require('yeast'); 45 | ``` 46 | 47 | To generate an id just call the `yeast` function. 48 | 49 | ```js 50 | console.log(yeast(), yeast(), yeast()); // outputs: KyxidwN KyxidwN.0 KyxidwN.1 51 | 52 | setTimeout(function () { 53 | console.log(yeast()); // outputs: KyxidwO 54 | }); 55 | ``` 56 | 57 | ### yeast.encode(num) 58 | 59 | An helper function that returns a string representing the specified number. The 60 | returned string contains only URL safe characters. 61 | 62 | ```js 63 | yeast.encode(+new Date()); // outputs: Kyxjuo1 64 | ``` 65 | 66 | ### yeast.decode(str) 67 | 68 | An helper function that returns the integer value specified by the given string. 69 | This function can be used to retrieve the timestamp from a `yeast` id. 70 | 71 | ```js 72 | var id = yeast(); // holds the value: Kyxl1OU 73 | 74 | yeast.decode(id); // outputs: 1439816226334 75 | ``` 76 | 77 | That's all folks. If you have ideas on how we can further compress the ids 78 | please open an issue! 79 | 80 | ## License 81 | 82 | [MIT](LICENSE) 83 | -------------------------------------------------------------------------------- /javascript/node_modules/yeast/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('') 4 | , length = 64 5 | , map = {} 6 | , seed = 0 7 | , i = 0 8 | , prev; 9 | 10 | /** 11 | * Return a string representing the specified number. 12 | * 13 | * @param {Number} num The number to convert. 14 | * @returns {String} The string representation of the number. 15 | * @api public 16 | */ 17 | function encode(num) { 18 | var encoded = ''; 19 | 20 | do { 21 | encoded = alphabet[num % length] + encoded; 22 | num = Math.floor(num / length); 23 | } while (num > 0); 24 | 25 | return encoded; 26 | } 27 | 28 | /** 29 | * Return the integer value specified by the given string. 30 | * 31 | * @param {String} str The string to convert. 32 | * @returns {Number} The integer value represented by the string. 33 | * @api public 34 | */ 35 | function decode(str) { 36 | var decoded = 0; 37 | 38 | for (i = 0; i < str.length; i++) { 39 | decoded = decoded * length + map[str.charAt(i)]; 40 | } 41 | 42 | return decoded; 43 | } 44 | 45 | /** 46 | * Yeast: A tiny growing id generator. 47 | * 48 | * @returns {String} A unique id. 49 | * @api public 50 | */ 51 | function yeast() { 52 | var now = encode(+new Date()); 53 | 54 | if (now !== prev) return seed = 0, prev = now; 55 | return now +'.'+ encode(seed++); 56 | } 57 | 58 | // 59 | // Map each character to its index. 60 | // 61 | for (; i < length; i++) map[alphabet[i]] = i; 62 | 63 | // 64 | // Expose the `yeast`, `encode` and `decode` functions. 65 | // 66 | yeast.encode = encode; 67 | yeast.decode = decode; 68 | module.exports = yeast; 69 | -------------------------------------------------------------------------------- /javascript/node_modules/yeast/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "yeast@0.1.2", 3 | "_id": "yeast@0.1.2", 4 | "_inBundle": false, 5 | "_integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", 6 | "_location": "/yeast", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "yeast@0.1.2", 12 | "name": "yeast", 13 | "escapedName": "yeast", 14 | "rawSpec": "0.1.2", 15 | "saveSpec": null, 16 | "fetchSpec": "0.1.2" 17 | }, 18 | "_requiredBy": [ 19 | "/engine.io-client" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 22 | "_shasum": "008e06d8094320c372dbc2f8ed76a0ca6c8ac419", 23 | "_spec": "yeast@0.1.2", 24 | "_where": "/Users/ersheff/Documents/GitStuff/Collab-Hub-Client/node_modules/engine.io-client", 25 | "author": { 26 | "name": "Arnout Kazemier" 27 | }, 28 | "bugs": { 29 | "url": "https://github.com/unshiftio/yeast/issues" 30 | }, 31 | "bundleDependencies": false, 32 | "deprecated": false, 33 | "description": "Tiny but linear growing unique id generator", 34 | "devDependencies": { 35 | "assume": "1.3.x", 36 | "istanbul": "0.3.x", 37 | "mocha": "2.3.x", 38 | "pre-commit": "1.1.x", 39 | "zuul": "3.4.x" 40 | }, 41 | "homepage": "https://github.com/unshiftio/yeast", 42 | "keywords": [ 43 | "yeast", 44 | "id", 45 | "generator", 46 | "unique" 47 | ], 48 | "license": "MIT", 49 | "main": "index.js", 50 | "name": "yeast", 51 | "repository": { 52 | "type": "git", 53 | "url": "git+https://github.com/unshiftio/yeast.git" 54 | }, 55 | "scripts": { 56 | "100%": "istanbul check-coverage --statements 100 --functions 100 --lines 100 --branches 100", 57 | "coverage": "istanbul cover _mocha -- test.js", 58 | "test": "mocha test.js", 59 | "test-browser": "zuul -- test.js", 60 | "test-node": "istanbul cover _mocha --report lcovonly -- test.js", 61 | "watch": "mocha --watch test.js" 62 | }, 63 | "version": "0.1.2" 64 | } 65 | -------------------------------------------------------------------------------- /javascript/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "collab-hub-client", 3 | "version": "0.5.0", 4 | "description": "client for Collab-Hub 0.5", 5 | "main": "CH-ClientScript-v5.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/ersheff/Collab-Hub-Client.git" 12 | }, 13 | "author": "", 14 | "license": "ISC", 15 | "bugs": { 16 | "url": "https://github.com/ersheff/Collab-Hub-Client/issues" 17 | }, 18 | "homepage": "https://github.com/ersheff/Collab-Hub-Client#readme", 19 | "dependencies": { 20 | "socket.io-client": "^4.0.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /license.md: -------------------------------------------------------------------------------- 1 | # Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0 2 | 3 | https://creativecommons.org/licenses/by-nc-sa/4.0/ 4 | 5 | This is a human-readable summary of (and not a substitute for) the [license](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode). [Disclaimer](https://creativecommons.org/licenses/by-nc-sa/4.0/#). 6 | 7 | ## You are free to: 8 | 9 | **Share** — copy and redistribute the material in any medium or format 10 | **Adapt** — remix, transform, and build upon the material 11 | The licensor cannot revoke these freedoms as long as you follow the license terms. 12 | 13 | -- 14 | 15 | ## Under the following terms: 16 | 17 | **Attribution** — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. 18 | **NonCommercial** — You may not use the material for commercial purposes. 19 | **ShareAlike** — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. 20 | **No additional restrictions** — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. 21 | 22 | --- 23 | 24 | ## Notices: 25 | 26 | You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation. 27 | No warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material. -------------------------------------------------------------------------------- /media/img/CH-Diagram-transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/CH-Diagram-transparent.png -------------------------------------------------------------------------------- /media/img/CH-Diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/CH-Diagram.png -------------------------------------------------------------------------------- /media/img/CH-Small-Logo-NoText.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/CH-Small-Logo-NoText.png -------------------------------------------------------------------------------- /media/img/CH-Title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/CH-Title.png -------------------------------------------------------------------------------- /media/img/Collab-Hub-Style.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/Collab-Hub-Style.jpg -------------------------------------------------------------------------------- /media/img/Max-Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/Max-Logo.png -------------------------------------------------------------------------------- /media/img/become-a-patron-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/become-a-patron-button.png -------------------------------------------------------------------------------- /media/img/for-bpatchers/CH-Chat-Title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-bpatchers/CH-Chat-Title.png -------------------------------------------------------------------------------- /media/img/for-bpatchers/CH-Client-Title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-bpatchers/CH-Client-Title.png -------------------------------------------------------------------------------- /media/img/for-bpatchers/CH-Controls-Title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-bpatchers/CH-Controls-Title.png -------------------------------------------------------------------------------- /media/img/for-bpatchers/CH-Events-Title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-bpatchers/CH-Events-Title.png -------------------------------------------------------------------------------- /media/img/for-bpatchers/CH-Rooms-Title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-bpatchers/CH-Rooms-Title.png -------------------------------------------------------------------------------- /media/img/for-readme/Chat-Cap.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-readme/Chat-Cap.jpeg -------------------------------------------------------------------------------- /media/img/for-readme/Chat-Cap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-readme/Chat-Cap.png -------------------------------------------------------------------------------- /media/img/for-readme/Client-Cap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-readme/Client-Cap.png -------------------------------------------------------------------------------- /media/img/for-readme/Controls-Cap.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-readme/Controls-Cap.jpeg -------------------------------------------------------------------------------- /media/img/for-readme/Demo-Cap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-readme/Demo-Cap.png -------------------------------------------------------------------------------- /media/img/for-readme/Events-Cap.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-readme/Events-Cap.jpeg -------------------------------------------------------------------------------- /media/img/for-readme/Rooms-Cap.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-readme/Rooms-Cap.jpeg -------------------------------------------------------------------------------- /media/img/for-readme/Script-Cap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Collab-Hub-io/Collab-Hub-Max-Client/b1fed33637a9b98b862d2a9cb33ad64d2755b66a/media/img/for-readme/Script-Cap.png -------------------------------------------------------------------------------- /package-info.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Collab-Hub", 3 | "displayname": "Collab-Hub Max Client", 4 | "version": "0.3.4", 5 | "author": "Nick Hwang, Eric Sheffield, Anthony T. Marasco", 6 | "authors": [ 7 | "Nick Hwang", 8 | "Eric Sheffield", 9 | "Anthony T. Marasco" 10 | ], 11 | "description": "Max Client for Collab-Hub.io -- a server-based collaborative tool meant to connect creative apps including Max, PD, Arduino, Unity, etc. Contains modules to use Collab-Hub with Max, implemented with Node4Max: Chat, Rooms, Observe, etc. Visit Collab-Hub.io for more information for other clients.", 12 | "tags": [ 13 | "networking", 14 | "remote collaboration", 15 | "network musical performance", 16 | "collaborative", 17 | "remote", 18 | "nodejs", 19 | "PD", 20 | "Arduino", 21 | "OSC" 22 | ], 23 | "website": "https://www.collab-hub.io", 24 | "extends": "", 25 | "extensible": 0, 26 | "max_version_min": "8.0", 27 | "max_version_max": "none", 28 | "os": { 29 | "macintosh": { 30 | "min_version": "8.0", 31 | "platform": [ 32 | "x64", 33 | "aarch64" 34 | ] 35 | }, 36 | "windows": { 37 | "min_version": "8.0", 38 | "platform": [ 39 | "x64" 40 | ] 41 | } 42 | }, 43 | "homepatcher": "Collab-Hub Modules.maxpat", 44 | "package_extra": { 45 | "reverse_domain": "io.collab-hub", 46 | "copyright": "Copyright © 2020-2022, Nick Hwang. All rights reserved." 47 | }, 48 | "filelist": { 49 | "externals": [], 50 | "patchers": [ 51 | "CH-Client.maxpat", 52 | "CH-ClientTesting.maxpat", 53 | "CH-Controls.maxpat", 54 | "CH-Events.maxpat", 55 | "CH-Rooms.maxpat", 56 | "CH-Chat.maxpat" 57 | ], 58 | "help": [ 59 | "CH-Client.maxhelp", 60 | "CH-ClientTesting.maxhelp", 61 | "CH-Controls.maxhelp", 62 | "CH-Events.maxhelp", 63 | "CH-Rooms.maxhelp", 64 | "CH-Chat.maxhelp" 65 | ], 66 | "media": [ 67 | "img/CH-Title.png", 68 | "img/CH-Diagram.png", 69 | "img/CH-Diagram-transparent.png", 70 | "img/Max-Logo.png", 71 | "img/Collab-Hub-Style.jpg", 72 | "img/CH-Title.png", 73 | "img/CH-Small-Logo-NoText.png" 74 | ], 75 | "docs": [ 76 | "CH-Client.maxref.xml", 77 | "CH-ClientTesting.maxref.xml", 78 | "CH-Controls.maxref.xml", 79 | "CH-Events.maxref.xml", 80 | "CH-Rooms.maxref.xml", 81 | "CH-Chat.maxref.xml", 82 | "Collab-Hub Modules.maxref.xml", 83 | "topics/Collab-Hub_topic.maxvig.xml", 84 | "tutorials/ch-tut/00-ch-index.maxtut.xml" 85 | ], 86 | "javascript": [ 87 | "CH-ClientScript.js", 88 | "CH-ClientInstanceManager.js", 89 | "CH-Chat-JS.js" 90 | ], 91 | "extras": [ 92 | "Collab-Hub Modules.maxpat" 93 | ], 94 | "examples": [ 95 | "CH-Simple-Routing.maxpat", 96 | "CH-Controls-and-Events.maxpat", 97 | "CH-Drum-Demo.maxpat", 98 | "CH-Push-Publish-Rooms.maxpat", 99 | "CH-Sequence-Trader/CH-Sequencer-Trader.maxpat", 100 | "Mapping-Strategies.maxpat" 101 | ], 102 | "templates": [ 103 | "collab-hub-template.maxpat" 104 | ], 105 | "clippings": [ 106 | "to_from_Server.maxpat" 107 | ] 108 | }, 109 | "c74install": 1, 110 | "installdate": 3716758452 111 | } --------------------------------------------------------------------------------